ci(build): add release job with changelog and both ZIPs
The workflow only uploaded unzipped contents as CI artifacts,
no GitHub release was ever created from CI. Restructured into
build + release jobs: build produces both debug and release ZIPs
(renamed to clean `TEESimulator-vX.Y-{Variant}.zip` format),
release extracts changelog from module/changelog.md and publishes
a GitHub release with both ZIPs attached.
This commit is contained in:
+73
-61
@@ -22,18 +22,9 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
attestations: write
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
outputs:
|
|
||||||
releaseName: ${{ steps.prepareArtifact.outputs.releaseName }}
|
|
||||||
debugName: ${{ steps.prepareArtifact.outputs.debugName }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out
|
- uses: actions/checkout@v4
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
with:
|
||||||
submodules: "recursive"
|
submodules: "recursive"
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -59,8 +50,7 @@ jobs:
|
|||||||
~/.cargo/bin/cargo-ndk
|
~/.cargo/bin/cargo-ndk
|
||||||
native-certgen/target
|
native-certgen/target
|
||||||
key: rust-${{ runner.os }}-${{ hashFiles('native-certgen/Cargo.lock') }}
|
key: rust-${{ runner.os }}-${{ hashFiles('native-certgen/Cargo.lock') }}
|
||||||
restore-keys: |
|
restore-keys: rust-${{ runner.os }}-
|
||||||
rust-${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Install cargo-ndk
|
- name: Install cargo-ndk
|
||||||
run: command -v cargo-ndk || cargo install cargo-ndk
|
run: command -v cargo-ndk || cargo install cargo-ndk
|
||||||
@@ -82,70 +72,92 @@ jobs:
|
|||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
./gradlew zipRelease zipDebug -Porg.gradle.parallel=true -Porg.gradle.vfs.watch=true -Dorg.gradle.jvmargs=-Xmx2048m
|
./gradlew zipRelease zipDebug -Porg.gradle.parallel=true -Porg.gradle.vfs.watch=true -Dorg.gradle.jvmargs=-Xmx2048m
|
||||||
|
|
||||||
- name: Prepare artifact
|
- name: Read version
|
||||||
if: success()
|
id: ver
|
||||||
id: prepareArtifact
|
run: |
|
||||||
|
ver=$(grep 'val verName' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/')
|
||||||
|
echo "version=${ver}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Rename ZIPs for release
|
||||||
run: |
|
run: |
|
||||||
set -e
|
|
||||||
RELEASE_FILE=$(find out -name "*Release*.zip" | head -1)
|
RELEASE_FILE=$(find out -name "*Release*.zip" | head -1)
|
||||||
DEBUG_FILE=$(find out -name "*Debug*.zip" | head -1)
|
DEBUG_FILE=$(find out -name "*Debug*.zip" | head -1)
|
||||||
|
|
||||||
if [[ -z "$RELEASE_FILE" || -z "$DEBUG_FILE" ]]; then
|
if [[ -z "$RELEASE_FILE" || -z "$DEBUG_FILE" ]]; then
|
||||||
echo "Error: Could not find release or debug files in out/"
|
echo "::error::Could not find release or debug ZIPs in out/"
|
||||||
echo "Contents of out/ directory:"
|
ls -la out/ || echo "out/ does not exist"
|
||||||
ls -la out/ || echo "out/ directory does not exist"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Extract names
|
|
||||||
RELEASE_NAME=$(basename "$RELEASE_FILE" .zip)
|
|
||||||
DEBUG_NAME=$(basename "$DEBUG_FILE" .zip)
|
|
||||||
|
|
||||||
echo "releaseName=$RELEASE_NAME" >> $GITHUB_OUTPUT
|
|
||||||
echo "debugName=$DEBUG_NAME" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
mkdir -p module-release module-debug
|
cp "$RELEASE_FILE" "out/TEESimulator-${VER}-Release.zip"
|
||||||
unzip -q "$RELEASE_FILE" -d module-release
|
cp "$DEBUG_FILE" "out/TEESimulator-${VER}-Debug.zip"
|
||||||
unzip -q "$DEBUG_FILE" -d module-debug
|
|
||||||
echo " Release: $RELEASE_NAME"
|
|
||||||
echo " Debug: $DEBUG_NAME"
|
|
||||||
|
|
||||||
- name: Upload release
|
echo "Release: $(basename "$RELEASE_FILE") -> TEESimulator-${VER}-Release.zip"
|
||||||
if: success()
|
echo "Debug: $(basename "$DEBUG_FILE") -> TEESimulator-${VER}-Debug.zip"
|
||||||
id: release
|
env:
|
||||||
uses: actions/upload-artifact@v4
|
VER: ${{ steps.ver.outputs.version }}
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.prepareArtifact.outputs.releaseName }}
|
name: TEESimulator-release-zip
|
||||||
path: "./module-release/*"
|
path: out/TEESimulator-*-Release.zip
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
compression-level: 6
|
|
||||||
|
|
||||||
- name: Upload debug
|
- uses: actions/upload-artifact@v4
|
||||||
if: success()
|
|
||||||
id: debug
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.prepareArtifact.outputs.debugName }}
|
name: TEESimulator-debug-zip
|
||||||
path: "./module-debug/*"
|
path: out/TEESimulator-*-Debug.zip
|
||||||
retention-days: 7
|
retention-days: 7
|
||||||
compression-level: 6
|
|
||||||
|
|
||||||
- name: Upload release mappings
|
- uses: actions/upload-artifact@v4
|
||||||
if: success()
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
with:
|
||||||
name: release-mappings-${{ github.run_number }}
|
name: release-mappings
|
||||||
path: "./app/build/outputs/mapping/release"
|
path: app/build/outputs/mapping/release
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
compression-level: 9
|
compression-level: 9
|
||||||
|
|
||||||
- name: Summary
|
release:
|
||||||
if: always()
|
needs: build
|
||||||
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Read version
|
||||||
|
id: ver
|
||||||
run: |
|
run: |
|
||||||
echo "## Build Summary" >> $GITHUB_STEP_SUMMARY
|
ver=$(grep 'val verName' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/')
|
||||||
echo "- **Status**: ${{ job.status }}" >> $GITHUB_STEP_SUMMARY
|
echo "version=${ver}" >> "$GITHUB_OUTPUT"
|
||||||
echo "- **Gradle Tasks**: assembleRelease, assembleDebug" >> $GITHUB_STEP_SUMMARY
|
|
||||||
if [[ "${{ job.status }}" == "success" ]]; then
|
- uses: actions/download-artifact@v4
|
||||||
echo "- **Release Artifact**: ${{ steps.prepareArtifact.outputs.releaseName }}" >> $GITHUB_STEP_SUMMARY
|
with:
|
||||||
echo "- **Debug Artifact**: ${{ steps.prepareArtifact.outputs.debugName }}" >> $GITHUB_STEP_SUMMARY
|
name: TEESimulator-release-zip
|
||||||
fi
|
path: zips
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: TEESimulator-debug-zip
|
||||||
|
path: zips
|
||||||
|
|
||||||
|
- name: Extract changelog
|
||||||
|
run: |
|
||||||
|
ver="${VER#v}"
|
||||||
|
awk "/^## TEESimulator v${ver}/{flag=1; next} /^## TEESimulator v/{if(flag) exit} flag" module/changelog.md > /tmp/notes.md
|
||||||
|
cat /tmp/notes.md
|
||||||
|
env:
|
||||||
|
VER: ${{ steps.ver.outputs.version }}
|
||||||
|
|
||||||
|
- name: Create release
|
||||||
|
run: |
|
||||||
|
gh release delete "$VER" --yes 2>/dev/null || true
|
||||||
|
gh release create "$VER" \
|
||||||
|
--title "$VER" \
|
||||||
|
--latest \
|
||||||
|
--notes-file /tmp/notes.md \
|
||||||
|
"zips/TEESimulator-${VER}-Release.zip" \
|
||||||
|
"zips/TEESimulator-${VER}-Debug.zip"
|
||||||
|
env:
|
||||||
|
VER: ${{ steps.ver.outputs.version }}
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
Reference in New Issue
Block a user