Android Upstream Release #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Android Upstream Release | |
| on: | |
| schedule: | |
| - cron: '17 3 * * *' | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: 'Optional upstream tag to build (e.g. v0.37.1)' | |
| required: false | |
| type: string | |
| push: | |
| tags: | |
| - 'v*' | |
| permissions: | |
| contents: write | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| resolve-tag: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| outputs: | |
| target_tag: ${{ steps.pick.outputs.target_tag }} | |
| should_build: ${{ steps.pick.outputs.should_build }} | |
| steps: | |
| - name: Checkout fork | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Resolve upstream tag | |
| id: pick | |
| env: | |
| INPUT_TAG: ${{ github.event.inputs.tag }} | |
| EVENT_NAME: ${{ github.event_name }} | |
| REF_NAME: ${{ github.ref_name }} | |
| GH_TOKEN: ${{ github.token }} | |
| REPO: ${{ github.repository }} | |
| run: | | |
| set -euo pipefail | |
| git remote add upstream https://github.com/rtk-ai/rtk.git 2>/dev/null || true | |
| git fetch upstream '+refs/tags/*:refs/upstream-tags/*' | |
| git fetch origin '+refs/tags/*:refs/tags/*' | |
| TARGET="" | |
| if [ -n "${INPUT_TAG:-}" ]; then | |
| TARGET="$INPUT_TAG" | |
| elif [ "$EVENT_NAME" = "push" ]; then | |
| TARGET="$REF_NAME" | |
| else | |
| TARGET="$(git for-each-ref refs/upstream-tags --format='%(refname:strip=2)' | grep '^v' | sort -V | tail -n1)" | |
| fi | |
| if [ -z "$TARGET" ]; then | |
| echo "target_tag=" >> "$GITHUB_OUTPUT" | |
| echo "should_build=false" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| if ! git rev-parse -q --verify "refs/upstream-tags/$TARGET" >/dev/null; then | |
| echo "target_tag=$TARGET" >> "$GITHUB_OUTPUT" | |
| echo "should_build=false" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| SHOULD_BUILD="true" | |
| # Manual dispatch with explicit tag is force-build. | |
| # Schedule skips only when Android assets are already present in release. | |
| if [ "$EVENT_NAME" = "schedule" ]; then | |
| REL_JSON="$(gh api "repos/$REPO/releases/tags/$TARGET" 2>/dev/null || true)" | |
| if [ -n "$REL_JSON" ]; then | |
| HAS_TAR="$(printf '%s' "$REL_JSON" | jq -r '[.assets[].name] | any(. == "rtk-aarch64-linux-android-'"$TARGET"'.tar.gz")')" | |
| HAS_SHA="$(printf '%s' "$REL_JSON" | jq -r '[.assets[].name] | any(. == "rtk-aarch64-linux-android-'"$TARGET"'.tar.gz.sha256")')" | |
| if [ "$HAS_TAR" = "true" ] && [ "$HAS_SHA" = "true" ]; then | |
| SHOULD_BUILD="false" | |
| fi | |
| fi | |
| fi | |
| echo "target_tag=$TARGET" >> "$GITHUB_OUTPUT" | |
| echo "should_build=$SHOULD_BUILD" >> "$GITHUB_OUTPUT" | |
| build-and-release: | |
| needs: resolve-tag | |
| if: needs.resolve-tag.outputs.should_build == 'true' && needs.resolve-tag.outputs.target_tag != '' | |
| runs-on: ubuntu-latest | |
| env: | |
| TARGET_TAG: ${{ needs.resolve-tag.outputs.target_tag }} | |
| TARGET_TRIPLE: aarch64-linux-android | |
| API_LEVEL: '24' | |
| steps: | |
| - name: Checkout fork | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Fetch and checkout upstream tag commit | |
| id: upstream | |
| run: | | |
| set -euo pipefail | |
| git remote add upstream https://github.com/rtk-ai/rtk.git 2>/dev/null || true | |
| git fetch upstream '+refs/tags/*:refs/upstream-tags/*' | |
| COMMIT="$(git rev-parse "refs/upstream-tags/${TARGET_TAG}^{commit}")" | |
| echo "commit_sha=$COMMIT" >> "$GITHUB_OUTPUT" | |
| git checkout -f "$COMMIT" | |
| - name: Set up Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: aarch64-linux-android | |
| - name: Setup Android NDK | |
| uses: nttld/setup-ndk@v1 | |
| id: setup-ndk | |
| with: | |
| ndk-version: r27d | |
| - name: Configure Android linker | |
| run: | | |
| TOOLCHAIN="${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin" | |
| echo "CC_aarch64_linux_android=$TOOLCHAIN/aarch64-linux-android${API_LEVEL}-clang" >> $GITHUB_ENV | |
| echo "CXX_aarch64_linux_android=$TOOLCHAIN/aarch64-linux-android${API_LEVEL}-clang++" >> $GITHUB_ENV | |
| echo "CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=$TOOLCHAIN/aarch64-linux-android${API_LEVEL}-clang" >> $GITHUB_ENV | |
| echo "AR_aarch64_linux_android=$TOOLCHAIN/llvm-ar" >> $GITHUB_ENV | |
| - name: Build Android arm64 release | |
| run: cargo build --release --target $TARGET_TRIPLE | |
| - name: Package artifacts | |
| run: | | |
| set -euo pipefail | |
| BIN="target/${TARGET_TRIPLE}/release/rtk" | |
| OUT="rtk-${TARGET_TRIPLE}-${TARGET_TAG}.tar.gz" | |
| cp "$BIN" rtk | |
| tar -czvf "$OUT" rtk | |
| sha256sum "$OUT" > "$OUT.sha256" | |
| file rtk || true | |
| ls -lh "$OUT" "$OUT.sha256" | |
| - name: Upload workflow artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: rtk-android-${{ env.TARGET_TAG }} | |
| path: | | |
| rtk-aarch64-linux-android-${{ env.TARGET_TAG }}.tar.gz | |
| rtk-aarch64-linux-android-${{ env.TARGET_TAG }}.tar.gz.sha256 | |
| - name: Create or update release on fork | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ env.TARGET_TAG }} | |
| target_commitish: ${{ steps.upstream.outputs.commit_sha }} | |
| name: RTK ${{ env.TARGET_TAG }} (Android) | |
| prerelease: false | |
| generate_release_notes: true | |
| files: | | |
| rtk-aarch64-linux-android-${{ env.TARGET_TAG }}.tar.gz | |
| rtk-aarch64-linux-android-${{ env.TARGET_TAG }}.tar.gz.sha256 |