Skip to content

Commit bd074d2

Browse files
jeremyederclaude
andauthored
Add release infrastructure (#25)
- Add GitHub Actions workflow for automated releases - Set initial version to 0.0.0 (pre-release state) - Workflow supports major/minor/patch version bumps - Auto-generates changelog from commits - Creates GitHub releases with source archives 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 4.5 <[email protected]>
1 parent 8d7bca9 commit bd074d2

File tree

2 files changed

+125
-1
lines changed

2 files changed

+125
-1
lines changed

.github/workflows/release.yaml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
name: Release Pipeline
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
bump_type:
7+
description: 'Version bump type'
8+
required: true
9+
default: 'patch'
10+
type: choice
11+
options:
12+
- major
13+
- minor
14+
- patch
15+
16+
jobs:
17+
release:
18+
runs-on: ubuntu-latest
19+
permissions:
20+
contents: write
21+
outputs:
22+
new_tag: ${{ steps.next_version.outputs.new_tag }}
23+
steps:
24+
- name: Checkout Repository
25+
uses: actions/checkout@v5
26+
with:
27+
fetch-depth: 0
28+
29+
- name: Get Latest Tag
30+
id: get_latest_tag
31+
run: |
32+
echo "All existing tags:"
33+
git tag --list 'v*.*.*' --sort=-version:refname
34+
35+
LATEST_TAG=$(git tag --list 'v*.*.*' --sort=-version:refname | head -n 1)
36+
if [ -z "$LATEST_TAG" ]; then
37+
LATEST_TAG="v0.0.0"
38+
fi
39+
echo "latest_tag=$LATEST_TAG" >> $GITHUB_OUTPUT
40+
echo "Latest tag: $LATEST_TAG"
41+
42+
- name: Calculate Next Version
43+
id: next_version
44+
run: |
45+
LATEST_TAG="${{ steps.get_latest_tag.outputs.latest_tag }}"
46+
VERSION=${LATEST_TAG#v}
47+
48+
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
49+
50+
case "${{ github.event.inputs.bump_type }}" in
51+
major)
52+
MAJOR=$((MAJOR + 1))
53+
MINOR=0
54+
PATCH=0
55+
;;
56+
minor)
57+
MINOR=$((MINOR + 1))
58+
PATCH=0
59+
;;
60+
patch)
61+
PATCH=$((PATCH + 1))
62+
;;
63+
esac
64+
65+
NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}"
66+
echo "new_tag=$NEW_VERSION" >> $GITHUB_OUTPUT
67+
echo "New version: $NEW_VERSION"
68+
69+
- name: Generate Changelog
70+
id: changelog
71+
run: |
72+
LATEST_TAG="${{ steps.get_latest_tag.outputs.latest_tag }}"
73+
NEW_TAG="${{ steps.next_version.outputs.new_tag }}"
74+
75+
echo "# Release $NEW_TAG" > RELEASE_CHANGELOG.md
76+
echo "" >> RELEASE_CHANGELOG.md
77+
echo "## Changes since $LATEST_TAG" >> RELEASE_CHANGELOG.md
78+
echo "" >> RELEASE_CHANGELOG.md
79+
80+
if [ "$LATEST_TAG" = "v0.0.0" ]; then
81+
git log --pretty=format:"- %s (%h)" >> RELEASE_CHANGELOG.md
82+
else
83+
git log ${LATEST_TAG}..HEAD --pretty=format:"- %s (%h)" >> RELEASE_CHANGELOG.md
84+
fi
85+
86+
echo "" >> RELEASE_CHANGELOG.md
87+
echo "" >> RELEASE_CHANGELOG.md
88+
echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${LATEST_TAG}...${NEW_TAG}" >> RELEASE_CHANGELOG.md
89+
90+
cat RELEASE_CHANGELOG.md
91+
92+
- name: Create Tag
93+
id: create_tag
94+
uses: rickstaa/action-create-tag@v1
95+
with:
96+
tag: ${{ steps.next_version.outputs.new_tag }}
97+
message: "Release ${{ steps.next_version.outputs.new_tag }}"
98+
force_push_tag: false
99+
github_token: ${{ secrets.GITHUB_TOKEN }}
100+
101+
- name: Create Release Archive
102+
id: create_archive
103+
run: |
104+
NEW_TAG="${{ steps.next_version.outputs.new_tag }}"
105+
ARCHIVE_NAME="acp-mobile-${NEW_TAG}.tar.gz"
106+
107+
git archive --format=tar.gz --prefix=acp-mobile-${NEW_TAG}/ HEAD > $ARCHIVE_NAME
108+
109+
echo "archive_name=$ARCHIVE_NAME" >> $GITHUB_OUTPUT
110+
111+
- name: Create Release
112+
id: create_release
113+
uses: softprops/action-gh-release@v2
114+
env:
115+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
116+
with:
117+
tag_name: ${{ steps.next_version.outputs.new_tag }}
118+
name: "Release ${{ steps.next_version.outputs.new_tag }}"
119+
body_path: RELEASE_CHANGELOG.md
120+
draft: false
121+
prerelease: false
122+
files: |
123+
${{ steps.create_archive.outputs.archive_name }}
124+
RELEASE_CHANGELOG.md

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "acp-mobile",
33
"main": "expo-router/entry",
4-
"version": "1.0.0",
4+
"version": "0.0.0",
55
"scripts": {
66
"start": "expo start",
77
"start:offline": "EXPO_NO_DOCTOR=1 EXPO_OFFLINE=1 expo start --offline",

0 commit comments

Comments
 (0)