This repository has been archived by the owner on Sep 9, 2024. It is now read-only.
Weekly CI #58
This file contains 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: Weekly CI | |
env: | |
SOURCE_PATH: './src/kaiteki' | |
PATCH_VERSION: ${{ github.event.inputs.patch_version }} | |
on: | |
workflow_dispatch: | |
inputs: | |
patch_version: | |
description: 'Patch version' | |
required: false | |
type: string | |
schedule: | |
- cron: '0 0 * * 1' | |
permissions: | |
contents: read | |
pages: write | |
id-token: write | |
jobs: | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
working-directory: ${{ env.SOURCE_PATH }} | |
outputs: | |
weekly-epoch: ${{steps.build-variables.outputs.WEEKLY_EPOCH}} | |
build-name: ${{steps.build-variables.outputs.BUILD_NAME}} | |
make-args: ${{steps.build-variables.outputs.MAKE_ARGS}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'master' | |
cache: true | |
- name: Get packages | |
run: 'flutter pub get' | |
- name: Generate Localizations | |
run: 'flutter gen-l10n' | |
- name: Analyze | |
uses: invertase/[email protected] | |
with: | |
working-directory: ${{ env.SOURCE_PATH }} | |
- name: Test | |
run: 'flutter test --coverage -r expanded --no-pub' | |
- name: Provide build variables | |
id: build-variables | |
run: | | |
echo "WEEKLY_EPOCH=$(date +%s)" >> $GITHUB_OUTPUT | |
echo "BUILD_NAME=$(date +%Y-%U)${{ github.event.inputs.patch_version && format('.${0}', github.event.inputs.patch_version) || '' }}" >> $GITHUB_OUTPUT | |
echo "MAKE_ARGS=RELEASE=TRUE SIGNED=TRUE SPLIT_PER_ABI=TRUE WEEKLY_EPOCH=$(date +%s)" >> $GITHUB_OUTPUT | |
build-linux: | |
name: Build for Linux | |
runs-on: ubuntu-latest | |
needs: test | |
defaults: | |
run: | |
working-directory: ${{ env.SOURCE_PATH }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'master' | |
cache: true | |
- name: Update Linux repos | |
run: 'sudo apt-get update --fix-missing && sudo apt-get -y upgrade' | |
- name: Install Linux build requirements | |
run: 'sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev libhandy-1-dev' | |
- name: Enable Linux Desktop | |
run: 'flutter config --enable-linux-desktop' | |
- name: Get packages | |
run: 'flutter pub get' | |
- name: Generate Localizations | |
run: 'flutter gen-l10n' | |
- name: Build | |
run: 'make build-linux ${{needs.test.outputs.make-args}}' | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux | |
path: '${{ env.SOURCE_PATH }}/build/linux/x64/release/bundle/' | |
package-appimage: | |
name: Package (AppImage) | |
runs-on: ubuntu-latest | |
needs: build-linux | |
if: github.event_name != 'pull_request' | |
steps: | |
- name: Install packaging dependencies | |
run: 'sudo apt-get install -y python3-pip python3-setuptools patchelf desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse' | |
- name: Download AppImageTool | |
run: | | |
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O appimagetool | |
chmod +x appimagetool | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: linux | |
path: 'kaiteki.AppDir' | |
- name: Prepare directory | |
run: | | |
chmod +x kaiteki.AppDir/kaiteki | |
wget https://raw.githubusercontent.com/Craftplacer/Kaiteki/master/assets/icons/windows/kaiteki.png -O kaiteki.AppDir/kaiteki.png | |
wget https://raw.githubusercontent.com/Craftplacer/Kaiteki/master/assets/icons/windows/kaiteki.png -O kaiteki.AppDir/.DirIcon | |
wget https://raw.githubusercontent.com/Craftplacer/Kaiteki/master/packaging/linux/kaiteki.desktop -O kaiteki.AppDir/kaiteki.desktop | |
wget https://raw.githubusercontent.com/Craftplacer/Kaiteki/master/packaging/linux/AppRun -O kaiteki.AppDir/AppRun | |
chmod +x kaiteki.AppDir/AppRun | |
- name: Make AppImage | |
run: | | |
./appimagetool --appimage-extract | |
./squashfs-root/AppRun kaiteki.AppDir/ | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: appimage | |
path: 'Kaiteki-x86_64.AppImage' | |
build-android: | |
name: Build for Android | |
runs-on: ubuntu-latest | |
needs: test | |
defaults: | |
run: | |
working-directory: ${{ env.SOURCE_PATH }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'master' | |
cache: true | |
- name: Get packages | |
run: 'flutter pub get' | |
- name: Generate Localizations | |
run: 'flutter gen-l10n' | |
- name: Dump signing key | |
uses: timheuer/[email protected] | |
with: | |
fileName: 'keystore.pfx' | |
fileDir: '${{ env.SOURCE_PATH }}/android/app/' | |
encodedString: ${{ secrets.ANDROID_KEYSTORE }} | |
- name: Build (signed) | |
run: 'make build-android ${{needs.test.outputs.make-args}}' | |
env: | |
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: android | |
path: '${{ env.SOURCE_PATH }}/build/app/outputs/flutter-apk/app-*.apk' | |
build-windows: | |
name: Build for Windows | |
runs-on: windows-latest | |
needs: test | |
defaults: | |
run: | |
working-directory: ${{ env.SOURCE_PATH }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'master' | |
cache: true | |
- name: Enable Windows Desktop | |
run: 'flutter config --enable-windows-desktop' | |
- name: Get packages | |
run: 'flutter pub get' | |
- name: Generate Localizations | |
run: 'flutter gen-l10n' | |
- name: Build | |
run: 'make build-windows ${{needs.test.outputs.make-args}}' | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: windows | |
path: '${{ env.SOURCE_PATH }}/build/windows/x64/runner/Release/' | |
build-web: | |
name: Build for Web | |
runs-on: ubuntu-latest | |
needs: test | |
defaults: | |
run: | |
working-directory: ${{ env.SOURCE_PATH }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'master' | |
cache: true | |
- name: Enable web | |
run: flutter config --enable-web | |
- name: Get packages | |
run: 'flutter pub get' | |
- name: Generate Localizations | |
run: 'flutter gen-l10n' | |
- name: Build | |
run: 'make build-web ${{needs.test.outputs.make-args}}' | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: web | |
path: '${{ env.SOURCE_PATH }}/build/web/*' | |
deploy-web: | |
name: Deploy for Web | |
runs-on: ubuntu-latest | |
needs: build-web | |
if: github.event_name != 'pull_request' | |
concurrency: | |
group: "pages" | |
cancel-in-progress: true | |
steps: | |
- name: Download web artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: web | |
path: ./web-publish | |
- name: Setup Pages | |
uses: actions/configure-pages@v2 | |
- name: Upload artifact | |
uses: actions/upload-pages-artifact@v1 | |
with: | |
path: './web-publish' | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@v1 | |
deploy: | |
name: Deploy | |
runs-on: ubuntu-latest | |
permissions: write-all | |
needs: [ "test", "package-appimage", "build-android", "build-windows" ] | |
steps: | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
- name: Zip multi-file artifacts | |
run: | | |
zip -r windows.zip windows | |
zip -r linux.zip linux | |
- name: Create release | |
uses: "marvinpinto/action-automatic-releases@latest" | |
with: | |
repo_token: "${{ secrets.GITHUB_TOKEN }}" | |
automatic_release_tag: weekly-${{needs.test.outputs.build-name}} | |
title: Weekly ${{needs.test.outputs.build-name}} | |
prerelease: true | |
files: | | |
android/*.apk | |
appimage/*.AppImage | |
linux.zip | |
windows.zip |