84 lines
3.0 KiB
YAML
84 lines
3.0 KiB
YAML
name: Build Linux Application
|
|
|
|
# Only a release built through "Releases -> New Release" starts a build. A tag
|
|
# pushed with plain git does not publish a release and is therefore ignored.
|
|
on:
|
|
release:
|
|
types:
|
|
- published
|
|
|
|
env:
|
|
# Keep in sync with the other workflows and with `ac_web/Dockerfile`.
|
|
FLUTTER_VERSION: '3.44.9'
|
|
|
|
jobs:
|
|
linux:
|
|
runs-on: ubuntu-latest
|
|
# Same base image as the docker job, it already brings the tools the
|
|
# actions below expect (git, curl, unzip, node).
|
|
container:
|
|
image: catthehacker/ubuntu:act-latest
|
|
|
|
# The flutter project lives in a sub directory of the repository.
|
|
defaults:
|
|
run:
|
|
working-directory: ac_web
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: https://github.com/actions/checkout@v4
|
|
|
|
# The flutter tool runs git inside the workspace and inside its own sdk,
|
|
# and git refuses to work in directories it considers to belong to
|
|
# somebody else.
|
|
- name: Trust the workspace
|
|
run: git config --global --add safe.directory '*'
|
|
|
|
# Everything `flutter build linux` needs to compile the gtk runner.
|
|
- name: Install the linux desktop toolchain
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y --no-install-recommends \
|
|
clang cmake ninja-build pkg-config \
|
|
libgtk-3-dev liblzma-dev libstdc++-12-dev \
|
|
curl unzip xz-utils
|
|
|
|
# `subosito/flutter-action` cannot be used: it caches the sdk through
|
|
# `actions/cache@v5`, and the act-runner of this gitea instance only
|
|
# supports actions up to node20 ("runs.using ... got node24"). Unpacking
|
|
# the official archive does the same thing and pins the version exactly,
|
|
# just like `ac_web/Dockerfile` does.
|
|
- name: Set up Flutter
|
|
run: |
|
|
curl -fsSL "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${{ env.FLUTTER_VERSION }}-stable.tar.xz" \
|
|
| tar -xJ -C /opt
|
|
echo "/opt/flutter/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Show the flutter version
|
|
run: flutter --version
|
|
|
|
- name: Install dependencies
|
|
run: flutter pub get
|
|
|
|
- name: Run tests
|
|
run: flutter test
|
|
|
|
- name: Build the linux application
|
|
run: flutter build linux --release
|
|
|
|
# The build produces a directory, not a single file: the executable next
|
|
# to the flutter engine and its data. It is packed so that the artifact
|
|
# keeps the executable bit.
|
|
- name: Pack the bundle
|
|
run: tar -czf ac_web-linux-x64-${{ github.ref_name }}.tar.gz -C build/linux/x64/release bundle
|
|
|
|
# Artifacts of v4 need gitea 1.22 or newer, older instances need @v3.
|
|
- name: Upload the bundle
|
|
uses: https://github.com/actions/upload-artifact@v4
|
|
with:
|
|
name: ac_web-linux-x64-${{ github.ref_name }}
|
|
# Artifact paths are relative to the repository, not to the
|
|
# working-directory above.
|
|
path: ac_web/ac_web-linux-x64-${{ github.ref_name }}.tar.gz
|
|
if-no-files-found: error
|