name: Build on: push: branches: [ "main" ] paths-ignore: - '**.md' - '.github/**' - '!.github/workflows/**' pull_request: branches: [ "main" ] paths-ignore: - '**.md' - '.github/**' - '!.github/workflows/**' workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: "recursive" fetch-depth: 0 - name: Setup Java uses: actions/setup-java@v4 with: distribution: temurin java-version: 21 cache: 'gradle' - name: Setup Rust toolchain uses: dtolnay/rust-toolchain@stable with: targets: aarch64-linux-android,armv7-linux-androideabi,i686-linux-android,x86_64-linux-android - name: Cache Rust artifacts uses: actions/cache@v4 with: path: | ~/.cargo/registry ~/.cargo/git ~/.cargo/bin/cargo-ndk native-certgen/target key: rust-${{ runner.os }}-${{ hashFiles('native-certgen/Cargo.lock') }} restore-keys: rust-${{ runner.os }}- - name: Install cargo-ndk run: command -v cargo-ndk || cargo install cargo-ndk - name: Set up ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: ccache-${{ runner.os }}-${{ github.ref_name }} restore-keys: | ccache-${{ runner.os }}-${{ github.ref_name }} ccache-${{ runner.os }}- ccache- - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 - name: Build with Gradle run: | chmod +x ./gradlew ./gradlew zipRelease zipDebug -Porg.gradle.parallel=true -Porg.gradle.vfs.watch=true -Dorg.gradle.jvmargs=-Xmx2048m - name: Read version id: ver run: | ver=$(grep 'val verName' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/') echo "version=${ver}" >> "$GITHUB_OUTPUT" - name: Rename ZIPs for release run: | RELEASE_FILE=$(find out -name "*Release*.zip" | head -1) DEBUG_FILE=$(find out -name "*Debug*.zip" | head -1) if [[ -z "$RELEASE_FILE" || -z "$DEBUG_FILE" ]]; then echo "::error::Could not find release or debug ZIPs in out/" ls -la out/ || echo "out/ does not exist" exit 1 fi cp "$RELEASE_FILE" "out/TEESimulator-${VER}-Release.zip" cp "$DEBUG_FILE" "out/TEESimulator-${VER}-Debug.zip" echo "Release: $(basename "$RELEASE_FILE") -> TEESimulator-${VER}-Release.zip" echo "Debug: $(basename "$DEBUG_FILE") -> TEESimulator-${VER}-Debug.zip" env: VER: ${{ steps.ver.outputs.version }} - uses: actions/upload-artifact@v4 with: name: TEESimulator-release-zip path: out/TEESimulator-*-Release.zip retention-days: 30 - uses: actions/upload-artifact@v4 with: name: TEESimulator-debug-zip path: out/TEESimulator-*-Debug.zip retention-days: 7 - uses: actions/upload-artifact@v4 with: name: release-mappings path: app/build/outputs/mapping/release retention-days: 30 compression-level: 9 release: 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: | ver=$(grep 'val verName' app/build.gradle.kts | sed 's/.*"\(.*\)".*/\1/') echo "version=${ver}" >> "$GITHUB_OUTPUT" - uses: actions/download-artifact@v4 with: name: TEESimulator-release-zip 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 }}