Skip to content

Commit 2476cd4

Browse files
authored
Fixed up the deployment (#63)
1 parent 6e22d67 commit 2476cd4

35 files changed

Lines changed: 1125 additions & 126 deletions
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
name: Manual Build Release to Maven Central
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
auto-release:
8+
runs-on: ubuntu-latest
9+
permissions:
10+
contents: write
11+
packages: write
12+
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 0 # Need full history for git tags
18+
token: ${{ secrets.GITHUB_TOKEN }}
19+
20+
- name: Get latest tag and increment version
21+
id: version
22+
run: |
23+
# Configure git
24+
git config user.name "github-actions[bot]"
25+
git config user.email "github-actions[bot]@users.noreply.github.com"
26+
27+
# Get the latest tag matching semantic versioning
28+
LATEST_TAG=$(git tag -l "v[0-9]*.[0-9]*.[0-9]*" --sort=-v:refname | head -n 1)
29+
30+
if [ -z "$LATEST_TAG" ]; then
31+
echo "No existing tags found, starting with v0.0.1"
32+
NEW_VERSION="0.0.1"
33+
NEW_TAG="v0.0.1"
34+
else
35+
echo "Latest tag: $LATEST_TAG"
36+
37+
# Extract version without 'v' prefix
38+
VERSION=${LATEST_TAG#v}
39+
40+
# Split version into major.minor.patch
41+
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
42+
43+
# Strip any pre-release suffix from patch before incrementing (e.g., "0-alpha" -> "0")
44+
PATCH=${PATCH%%-*}
45+
46+
# Increment patch version
47+
PATCH=$((PATCH + 1))
48+
49+
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
50+
NEW_TAG="v$NEW_VERSION"
51+
fi
52+
53+
echo "New version: $NEW_VERSION"
54+
echo "New tag: $NEW_TAG"
55+
56+
# Export to GitHub env
57+
echo "VERSION=$NEW_VERSION" >> $GITHUB_ENV
58+
echo "TAG=$NEW_TAG" >> $GITHUB_ENV
59+
60+
# Create and push the tag
61+
git tag -a "$NEW_TAG" -m "Auto-release $NEW_VERSION"
62+
git push origin "$NEW_TAG"
63+
64+
echo "Created and pushed tag: $NEW_TAG"
65+
66+
- name: Set up JDK 21
67+
uses: actions/setup-java@v4
68+
with:
69+
java-version: '21'
70+
distribution: 'temurin'
71+
cache: 'gradle'
72+
73+
- name: Setup Gradle
74+
uses: gradle/actions/setup-gradle@v3
75+
76+
- name: Verify version matches tag
77+
run: |
78+
GRADLE_VERSION=$(./gradlew properties -q | grep "^version:" | awk '{print $2}')
79+
echo "Gradle version: $GRADLE_VERSION"
80+
echo "Expected version: $VERSION"
81+
if [ "$GRADLE_VERSION" != "$VERSION" ]; then
82+
echo "ERROR: Gradle version ($GRADLE_VERSION) does not match tag version ($VERSION)"
83+
exit 1
84+
fi
85+
86+
- name: Build and test
87+
run: ./gradlew clean build test
88+
89+
- name: Import GPG key
90+
env:
91+
GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
92+
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
93+
run: |
94+
echo "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --import
95+
# Test signing capability
96+
echo "test" | gpg --clearsign --batch --yes --pinentry-mode loopback --passphrase "$GPG_PASSPHRASE" > /dev/null
97+
echo "GPG key imported and tested successfully"
98+
99+
- name: Configure GPG for signing
100+
run: |
101+
# Configure gpg for non-interactive signing
102+
echo "pinentry-mode loopback" >> ~/.gnupg/gpg.conf
103+
echo "allow-loopback-pinentry" >> ~/.gnupg/gpg-agent.conf
104+
gpg-connect-agent reloadagent /bye
105+
106+
- name: Publish to Maven Central
107+
env:
108+
CENTRAL_PORTAL_USERNAME: ${{ secrets.CENTRAL_PORTAL_USERNAME }}
109+
CENTRAL_PORTAL_PASSWORD: ${{ secrets.CENTRAL_PORTAL_PASSWORD }}
110+
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
111+
GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }}
112+
run: |
113+
# Export GPG_TTY for passphrase
114+
export GPG_TTY=$(tty)
115+
116+
# Create gradle.properties with GPG credentials
117+
cat > ~/.gradle/gradle.properties << EOF
118+
signing.gnupg.keyName=$GPG_KEY_ID
119+
signing.gnupg.passphrase=$GPG_PASSPHRASE
120+
EOF
121+
122+
chmod 600 ~/.gradle/gradle.properties
123+
124+
# Publish to Maven Central via Central Portal
125+
./gradlew publishAggregationToCentralPortal \
126+
--no-daemon \
127+
--stacktrace
128+
129+
- name: Build distribution archives
130+
run: |
131+
./gradlew :codehead-test:jar :codehead-test:javadocJar :codehead-test:sourcesJar
132+
./gradlew :database-test:jar :database-test:javadocJar :database-test:sourcesJar
133+
./gradlew :feature-flag:jar :feature-flag:javadocJar :feature-flag:sourcesJar
134+
./gradlew :feature-flag-ddb:jar :feature-flag-ddb:javadocJar :feature-flag-ddb:sourcesJar
135+
./gradlew :feature-flag-etcd:jar :feature-flag-etcd:javadocJar :feature-flag-etcd:sourcesJar
136+
./gradlew :feature-flag-metrics:jar :feature-flag-metrics:javadocJar :feature-flag-metrics:sourcesJar
137+
./gradlew :feature-flag-sql:jar :feature-flag-sql:javadocJar :feature-flag-sql:sourcesJar
138+
./gradlew :local-queue:jar :local-queue:javadocJar :local-queue:sourcesJar
139+
./gradlew :metrics:jar :metrics:javadocJar :metrics:sourcesJar
140+
./gradlew :metrics-declarative:jar :metrics-declarative:javadocJar :metrics-declarative:sourcesJar
141+
./gradlew :metrics-micrometer:jar :metrics-micrometer:javadocJar :metrics-micrometer:sourcesJar
142+
./gradlew :metrics-test:jar :metrics-test:javadocJar :metrics-test:sourcesJar
143+
./gradlew :oop-mock:jar :oop-mock:javadocJar :oop-mock:sourcesJar
144+
./gradlew :oop-mock-client:jar :oop-mock-client:javadocJar :oop-mock-client:sourcesJar
145+
./gradlew :oop-mock-common:jar :oop-mock-common:javadocJar :oop-mock-common:sourcesJar
146+
./gradlew :oop-mock-dynamodb:jar :oop-mock-dynamodb:javadocJar :oop-mock-dynamodb:sourcesJar
147+
./gradlew :oop-mock-tests:jar :oop-mock-tests:javadocJar :oop-mock-tests:sourcesJar
148+
./gradlew :smr:jar :smr:javadocJar :smr:sourcesJar
149+
./gradlew :smr-metrics:jar :smr-metrics:javadocJar :smr-metrics:sourcesJar
150+
./gradlew :smr-yml:jar :smr-yml:javadocJar :smr-yml:sourcesJar
151+
152+
- name: Create GitHub Release
153+
uses: softprops/action-gh-release@v2
154+
with:
155+
tag_name: ${{ env.TAG }}
156+
name: Release ${{ env.VERSION }}
157+
body: |
158+
## Codehead Systems Libraries ${{ env.VERSION }}
159+
160+
**Auto-released** on merge to main.
161+
162+
### Maven Central
163+
164+
```xml
165+
<dependency>
166+
<groupId>com.codeheadsystems</groupId>
167+
<artifactId>smr</artifactId>
168+
<version>${{ env.VERSION }}</version>
169+
</dependency>
170+
```
171+
172+
```gradle
173+
implementation("com.codeheadsystems:smr:${{ env.VERSION }}")
174+
```
175+
176+
### Modules Published
177+
- `com.codeheadsystems:codehead-test:${{ env.VERSION }}`
178+
- `com.codeheadsystems:database-test:${{ env.VERSION }}`
179+
- `com.codeheadsystems:feature-flag:${{ env.VERSION }}`
180+
- `com.codeheadsystems:feature-flag-ddb:${{ env.VERSION }}`
181+
- `com.codeheadsystems:feature-flag-etcd:${{ env.VERSION }}`
182+
- `com.codeheadsystems:feature-flag-metrics:${{ env.VERSION }}`
183+
- `com.codeheadsystems:feature-flag-sql:${{ env.VERSION }}`
184+
- `com.codeheadsystems:local-queue:${{ env.VERSION }}`
185+
- `com.codeheadsystems:metrics:${{ env.VERSION }}`
186+
- `com.codeheadsystems:metrics-declarative:${{ env.VERSION }}`
187+
- `com.codeheadsystems:metrics-micrometer:${{ env.VERSION }}`
188+
- `com.codeheadsystems:metrics-test:${{ env.VERSION }}`
189+
- `com.codeheadsystems:oop-mock:${{ env.VERSION }}`
190+
- `com.codeheadsystems:oop-mock-client:${{ env.VERSION }}`
191+
- `com.codeheadsystems:oop-mock-common:${{ env.VERSION }}`
192+
- `com.codeheadsystems:oop-mock-dynamodb:${{ env.VERSION }}`
193+
- `com.codeheadsystems:oop-mock-tests:${{ env.VERSION }}`
194+
- `com.codeheadsystems:smr:${{ env.VERSION }}`
195+
- `com.codeheadsystems:smr-metrics:${{ env.VERSION }}`
196+
- `com.codeheadsystems:smr-yml:${{ env.VERSION }}`
197+
198+
### What's Changed
199+
See commits since last release for details.
200+
201+
**Note:** Artifacts may take up to 2 hours to appear in Maven Central after release.
202+
files: |
203+
codehead-test/build/libs/*.jar
204+
database-test/build/libs/*.jar
205+
feature-flag/build/libs/*.jar
206+
feature-flag-ddb/build/libs/*.jar
207+
feature-flag-etcd/build/libs/*.jar
208+
feature-flag-metrics/build/libs/*.jar
209+
feature-flag-sql/build/libs/*.jar
210+
local-queue/build/libs/*.jar
211+
metrics/build/libs/*.jar
212+
metrics-declarative/build/libs/*.jar
213+
metrics-micrometer/build/libs/*.jar
214+
metrics-test/build/libs/*.jar
215+
oop-mock/build/libs/*.jar
216+
oop-mock-client/build/libs/*.jar
217+
oop-mock-common/build/libs/*.jar
218+
oop-mock-dynamodb/build/libs/*.jar
219+
oop-mock-tests/build/libs/*.jar
220+
smr/build/libs/*.jar
221+
smr-metrics/build/libs/*.jar
222+
smr-yml/build/libs/*.jar
223+
draft: false
224+
prerelease: false
225+
generate_release_notes: true
226+
env:
227+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
228+
229+
- name: Notify on failure
230+
if: failure()
231+
run: |
232+
echo "::error::Auto-release failed! Check logs for details."

0 commit comments

Comments
 (0)