feat: add CI/CD pipelines — firmware + Android build, automated release
This commit is contained in:
parent
3debc3b31d
commit
044629e6ef
2 changed files with 119 additions and 0 deletions
55
.forgejo/workflows/ci.yml
Normal file
55
.forgejo/workflows/ci.yml
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
firmware:
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install PlatformIO
|
||||||
|
run: pip install platformio
|
||||||
|
|
||||||
|
- name: Build firmware
|
||||||
|
run: pio run
|
||||||
|
|
||||||
|
- name: Copy firmware to Android assets
|
||||||
|
run: bash tools/copy_firmware.sh
|
||||||
|
|
||||||
|
- name: Upload firmware artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: firmware
|
||||||
|
path: |
|
||||||
|
.pio/build/m5stack-atoms3r/firmware.bin
|
||||||
|
.pio/build/m5stack-atoms3r/bootloader.bin
|
||||||
|
.pio/build/m5stack-atoms3r/partitions.bin
|
||||||
|
android/app/src/main/assets/firmware/boot_app0.bin
|
||||||
|
|
||||||
|
android:
|
||||||
|
needs: firmware
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download firmware
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: firmware
|
||||||
|
|
||||||
|
- name: Build debug APK
|
||||||
|
working-directory: android
|
||||||
|
run: ./gradlew assembleDebug
|
||||||
|
env:
|
||||||
|
ANDROID_HOME: ${{ vars.ANDROID_HOME || '/opt/android-sdk' }}
|
||||||
|
|
||||||
|
- name: Upload debug APK
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: app-debug
|
||||||
|
path: android/app/build/outputs/apk/debug/app-debug.apk
|
||||||
64
.forgejo/workflows/release.yml
Normal file
64
.forgejo/workflows/release.yml
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
name: Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: self-hosted
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install PlatformIO
|
||||||
|
run: pip install platformio
|
||||||
|
|
||||||
|
- name: Build firmware
|
||||||
|
run: pio run
|
||||||
|
|
||||||
|
- name: Copy firmware to Android assets
|
||||||
|
run: bash tools/copy_firmware.sh
|
||||||
|
|
||||||
|
- name: Decode keystore
|
||||||
|
run: echo "${{ secrets.KEYSTORE_B64 }}" | base64 -d > android/keystore/sylda.jks
|
||||||
|
if: env.KEYSTORE_B64 != ''
|
||||||
|
|
||||||
|
- name: Write signing.properties
|
||||||
|
run: |
|
||||||
|
cat > android/signing.properties << 'PROPS'
|
||||||
|
storeFile=keystore/sylda.jks
|
||||||
|
storePassword=${{ secrets.KEYSTORE_PASS }}
|
||||||
|
keyAlias=${{ secrets.KEY_ALIAS }}
|
||||||
|
keyPassword=${{ secrets.KEY_PASS }}
|
||||||
|
PROPS
|
||||||
|
|
||||||
|
- name: Build release APK + AAB
|
||||||
|
working-directory: android
|
||||||
|
run: ./gradlew assembleRelease bundleRelease
|
||||||
|
env:
|
||||||
|
ANDROID_HOME: ${{ vars.ANDROID_HOME || '/opt/android-sdk' }}
|
||||||
|
|
||||||
|
- name: Gather release artifacts
|
||||||
|
run: |
|
||||||
|
mkdir -p release/artifacts
|
||||||
|
cp android/app/build/outputs/apk/release/app-release.apk release/artifacts/
|
||||||
|
cp android/app/build/outputs/bundle/release/app-release.aab release/artifacts/
|
||||||
|
cp android/app/src/main/assets/firmware/*.bin release/artifacts/
|
||||||
|
cd release/artifacts
|
||||||
|
sha256sum * > checksums.txt
|
||||||
|
|
||||||
|
- name: Upload release artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: release
|
||||||
|
path: release/artifacts/*
|
||||||
|
|
||||||
|
- name: Create Forgejo release
|
||||||
|
uses: https://git.eddydevink.nl/api/packages/eddy/actions/forgejo-release@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.FORGEJO_TOKEN }}
|
||||||
|
tag: ${{ github.ref_name }}
|
||||||
|
title: ${{ github.ref_name }}
|
||||||
|
files: release/artifacts/*
|
||||||
Loading…
Reference in a new issue