This repository has been archived by the owner on Sep 9, 2024. It is now read-only.
Weekly CI #80
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: './packages/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: | |
build-args: ${{steps.build-variables.outputs.ARGS}} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
channel: 'master' | |
cache: true | |
- name: Activate Melos | |
run: 'flutter pub global activate melos' | |
- name: Bootstrap packages | |
run: 'melos bootstrap' | |
- name: Generate Localizations | |
run: 'melos run gen_l10n' | |
- name: Analyze | |
uses: invertase/[email protected] | |
with: | |
working-directory: ${{ env.SOURCE_PATH }} | |
- name: Test | |
run: 'melos run test' | |
- name: Provide build variables | |
id: build-variables | |
run: | | |
echo -n "ARGS=" >> $GITHUB_OUTPUT | |
echo "$(./scripts/get-version-args.sh)" >> $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: Activate Melos | |
run: 'flutter pub global activate melos' | |
- name: Bootstrap packages | |
run: 'melos bootstrap' | |
- name: Generate Localizations | |
run: 'melos run gen_l10n' | |
- name: Build | |
run: 'melos run build:linux -- ${{needs.test.outputs.build-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: Prepare | |
run: './scripts/setup-appimage.sh' | |
- 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' | |
package-flatpak: | |
name: Package (Flatpak) | |
runs-on: ubuntu-latest | |
needs: build-linux | |
if: github.event_name != 'pull_request' | |
container: | |
image: bilelmoussaoui/flatpak-github-actions:gnome-44 | |
options: --privileged | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: linux | |
path: './packages/kaiteki/build/linux/x64/release/bundle/' | |
- name: Build Flatpak | |
uses: flatpak/flatpak-github-actions/[email protected] | |
with: | |
bundle: moe.craftplacer.kaiteki.flatpak | |
manifest-path: ./packaging/linux/moe.craftplacer.kaiteki.yaml | |
cache-key: flatpak-builder-${{ github.sha }} | |
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: Activate Melos | |
run: 'flutter pub global activate melos' | |
- name: Bootstrap packages | |
run: 'melos bootstrap' | |
- name: Generate Localizations | |
run: 'melos run 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 | |
run: 'melos run build:android:free -- ${{needs.test.outputs.build-args}}' | |
- 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: Activate Melos | |
run: 'flutter pub global activate melos' | |
- name: Bootstrap packages | |
run: 'melos bootstrap' | |
- name: Generate Localizations | |
run: 'melos run gen_l10n' | |
- name: Build | |
run: 'melos run build:windows -- ${{needs.test.outputs.build-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: Activate Melos | |
run: 'flutter pub global activate melos' | |
- name: Bootstrap packages | |
run: 'melos bootstrap' | |
- name: Generate Localizations | |
run: 'melos run gen_l10n' | |
- name: Build | |
run: 'melos run build:web -- ${{needs.test.outputs.build-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", "package-flatpak", "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 | |
# moe.craftplacer.kaiteki-*/*.flatpak | |
# |