Skip to content
This repository has been archived by the owner on Sep 9, 2024. It is now read-only.

Weekly CI

Weekly CI #54

Workflow file for this run

name: Weekly CI
env:
SOURCE_PATH: './src/kaiteki'
on:
workflow_dispatch:
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
run: 'flutter analyze --no-pub --no-fatal-infos --no-congratulate --no-preamble'
- 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_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/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