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