Stamp the 0.1.1 release #71
Workflow file for this run
This file contains hidden or 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: Build | |
| on: | |
| # Build on new commits or pull requests. | |
| push: | |
| paths-ignore: | |
| - '**.md' | |
| - '**.po' | |
| - '**.pot' | |
| pull_request: | |
| env: | |
| DOTNET_VERSION: 10.0.x | |
| jobs: | |
| build-ubuntu: | |
| runs-on: ubuntu-24.04 | |
| # Test building with .NET 10 (and .NET 11 when available) | |
| strategy: | |
| matrix: | |
| dotnet_version: [10.0.x] # [10.0.x, 11.0.x] | |
| env: | |
| # Skip pkg-config version checks. Ubuntu 22.04 doesn't have a recent | |
| # enough version of the libraries for some symbols needed at runtime, | |
| # but this doesn't matter for building. | |
| ADW_1_CFLAGS: undefined | |
| ADW_1_LIBS: undefined | |
| GTK_CFLAGS: undefined | |
| GTK_LIBS: undefined | |
| steps: | |
| - uses: actions/checkout@v7 | |
| # Rebuilding the save target after the Save As dialog accepts sends the write to | |
| # a path the portal never granted, so it lands on the portal's staging file | |
| # instead of the chosen name. Upstream fixed this in 2022 (Pinta bug 1958670) and | |
| # left a comment; this fork reintroduced it anyway. Hence a check that fails the | |
| # build. The file's own comment explains why. Delete both together or neither. | |
| - name: Check the save dialog does not rebuild its target file | |
| run: | | |
| save_action=Impasto/Actions/File/SaveDocumentImplementationAction.cs | |
| # The second grep drops comment lines, so the file's own explanation of the | |
| # rule does not trip it. | |
| if grep -nE '\.(GetChild|NewForPath|NewForUri|NewForCommandlineArg) ?\(' "$save_action" | grep -v ':[[:space:]]*//'; then | |
| echo "::error file=$save_action::Constructing a Gio.File here breaks desktop portals - use the file the dialog returned." | |
| exit 1 | |
| fi | |
| # configure.ac is the single source of truth for the version, and it's what | |
| # names the release zip - so read it from there rather than duplicating it. | |
| - name: Set environment variables | |
| run: | | |
| version=$(sed -n 's/^AC_INIT(\[impasto\], \[\(.*\)\])/\1/p' configure.ac) | |
| echo "IMPASTO_VERSION=$version" >> $GITHUB_ENV | |
| echo "BUILD_DIR=${{runner.temp}}/impasto-$version" >> $GITHUB_ENV | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: ${{matrix.dotnet_version}} | |
| - name: Install Apt Dependencies | |
| run: | | |
| sudo apt update | |
| sudo apt install autotools-dev autoconf-archive gettext intltool libadwaita-1-dev xvfb fonts-liberation | |
| - name: Generate Tarball | |
| run: | | |
| ./autogen.sh | |
| make dist | |
| mkdir ${{env.BUILD_DIR}} | |
| tar -xzf impasto-${{env.IMPASTO_VERSION}}.tar.gz -C ${{runner.temp}} | |
| - name: Create temporary global.json | |
| if: matrix.dotnet_version == '11.0.x' | |
| run: mv .github/workflows/dotnet11.global.json ${{env.BUILD_DIR}}/global.json | |
| - name: Build | |
| working-directory: ${{env.BUILD_DIR}} | |
| run: | | |
| ./configure --prefix ${{runner.temp}}/impasto-install | |
| make build | |
| - name: Test | |
| working-directory: ${{env.BUILD_DIR}} | |
| # GTK4 opens the default display eagerly during Application/Window setup - even though | |
| # the test harness never realizes a window, without a display at all it aborts the whole | |
| # test host instead of degrading gracefully. | |
| run: xvfb-run --auto-servernum make test | |
| - name: Verify code formatting | |
| if: matrix.dotnet_version == '10.0.x' | |
| run: dotnet format --no-restore --verify-no-changes | |
| - name: Test Install | |
| working-directory: ${{env.BUILD_DIR}} | |
| run: make install | |
| - name: Build Installer | |
| working-directory: ${{env.BUILD_DIR}} | |
| run: make releasezip | |
| - name: Upload Installer | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: Impasto-linux-dotnet-${{matrix.dotnet_version}}.zip | |
| path: ${{env.BUILD_DIR}}/impasto-${{env.IMPASTO_VERSION}}.zip | |
| if-no-files-found: error | |
| build-flatpak: | |
| runs-on: ubuntu-24.04 | |
| env: | |
| GNOME_RUNTIME: '50' | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: ${{env.DOTNET_VERSION}} | |
| - name: Install flatpak-builder and the GNOME runtime | |
| run: | | |
| sudo apt update | |
| sudo apt install -y flatpak flatpak-builder | |
| sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo | |
| sudo flatpak install -y --noninteractive flathub \ | |
| org.gnome.Platform//${{env.GNOME_RUNTIME}} org.gnome.Sdk//${{env.GNOME_RUNTIME}} | |
| # Self-contained so the flatpak needs no .NET runtime extension at runtime. | |
| - name: Publish | |
| run: | | |
| dotnet publish Impasto/Impasto.csproj -c Release -r linux-x64 --self-contained true \ | |
| -p:PublishDir=$PWD/release | |
| cd release && zip -r ../impasto-linux-x64.zip * -x "*.pdb" | |
| - name: Build flatpak | |
| run: | | |
| flatpak-builder --repo=repo --force-clean --disable-rofiles-fuse \ | |
| flatpak-build com.github.zbcoding.Impasto.yml | |
| flatpak build-bundle repo Impasto-x86_64.flatpak com.github.zbcoding.Impasto stable | |
| - name: Upload flatpak | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: Impasto-x86_64.flatpak | |
| path: Impasto-x86_64.flatpak | |
| if-no-files-found: error | |
| build-macos: | |
| # Build for both intel and arm64 | |
| strategy: | |
| matrix: | |
| build: [ { dotnet_rid: osx-arm64, lib_path: "/opt/homebrew/lib", runner: macos-14 }, { dotnet_rid: osx-x64, lib_path: "/usr/local/lib", runner: macos-15-intel }] | |
| name: build-macos (${{matrix.build.dotnet_rid}}) | |
| runs-on: ${{matrix.build.runner}} | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: ${{env.DOTNET_VERSION}} | |
| - name: Install Dependencies | |
| env: | |
| # Work around webp-pixbuf-loader issue: https://github.com/Homebrew/homebrew-core/issues/139497 | |
| HOMEBREW_NO_INSTALL_FROM_API: 1 | |
| run: brew install libadwaita adwaita-icon-theme gettext webp-pixbuf-loader libavif | |
| - name: Build | |
| run: dotnet build Pinta.sln -c Release | |
| - name: Test | |
| env: | |
| # Add libraries from homebrew to the search path so they can be loaded by gir.core | |
| DYLD_LIBRARY_PATH: ${{matrix.build.lib_path}} | |
| run: dotnet test Pinta.sln -c Release | |
| # ponytail: this fork has no Apple Developer ID, so the dmg is always | |
| # unsigned - Gatekeeper needs a right-click > Open on first launch. | |
| - name: Build Installer | |
| if: github.event_name != 'pull_request' | |
| run: | | |
| cd installer/macos | |
| ./build_installer.sh ${{matrix.build.dotnet_rid}} | |
| - name: Upload Installer | |
| if: github.event_name != 'pull_request' | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: "Impasto-${{matrix.build.dotnet_rid}}-unsigned.dmg" | |
| path: installer/macos/Impasto.dmg | |
| if-no-files-found: error | |
| build-windows: | |
| # Build for both x64 and arm64 | |
| strategy: | |
| matrix: | |
| build: [ { dotnet_rid: win-x64, mingw_folder: "${MINGW_PREFIX}/../clang64", mingw_system: clang64, mingw_repo: clang-x86_64, setup_arch: x64os, runner: windows-2025 }, { dotnet_rid: win-arm64, mingw_folder: "${MINGW_PREFIX}/../clangarm64", mingw_system: clangarm64, mingw_repo: clang-aarch64, setup_arch: arm64, runner: windows-11-arm }] | |
| name: build-windows (${{matrix.build.dotnet_rid}}) | |
| runs-on: ${{matrix.build.runner}} | |
| defaults: | |
| run: | |
| shell: msys2 {0} | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: microsoft/setup-msbuild@v3.0.0 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: ${{env.DOTNET_VERSION}} | |
| - name: Install dependencies | |
| uses: msys2/setup-msys2@v2 | |
| with: | |
| path-type: inherit # Inherit the path so that dotnet can be found | |
| update: true | |
| msystem: ${{matrix.build.mingw_system}} | |
| install: mingw-w64-${{matrix.build.mingw_repo}}-libadwaita mingw-w64-${{matrix.build.mingw_repo}}-webp-pixbuf-loader mingw-w64-${{matrix.build.mingw_repo}}-libavif mingw-w64-${{matrix.build.mingw_repo}}-aom | |
| - name: Build | |
| run: dotnet build Pinta.sln -c Release -p:MinGWFolder=${{matrix.build.mingw_folder}} | |
| - name: Test | |
| run: dotnet test Pinta.sln -c Release -p:MinGWFolder=${{matrix.build.mingw_folder}} | |
| # Note that msgfmt is already available from the Git for Windows installation! | |
| - name: Build Installer | |
| run: | | |
| choco install innosetup -y -v | |
| dotnet publish Impasto/Impasto.csproj -p:BuildTranslations=true -p:MinGWFolder=${{matrix.build.mingw_folder}} -c Release -r ${{matrix.build.dotnet_rid}} --self-contained true -p:PublishDir=../release/bin | |
| cp -r release/bin/icons release/bin/locale release/share/ | |
| rm -rf release/bin/icons release/bin/locale | |
| cp installer/macos/hicolor.index.theme release/share/icons/hicolor/index.theme | |
| version=$(sed -n 's/^AC_INIT(\[impasto\], \[\(.*\)\])/\1/p' configure.ac) | |
| iscc -DProductArch="${{matrix.build.setup_arch}}" -DProductVersion="$version" installer/windows/installer.iss | |
| - name: Upload Installer | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: "Impasto-${{matrix.build.dotnet_rid}}.exe" | |
| path: installer/windows/Impasto.exe | |
| if-no-files-found: error | |
| # On a v* tag, publish the built artifacts as a GitHub release. | |
| # Cutting a release (version bump, CHANGELOG, metainfo, tag): see docs/releases.md. | |
| release: | |
| needs: [build-ubuntu, build-flatpak, build-macos, build-windows] | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/download-artifact@v6 | |
| with: | |
| path: artifacts | |
| - name: Flatten (artifact dir names are already the filenames) | |
| run: | | |
| mkdir out | |
| for d in artifacts/*/; do mv "$d"* "out/$(basename "$d")"; done | |
| - name: Create release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: gh release create "$GITHUB_REF_NAME" out/* --generate-notes --repo "$GITHUB_REPOSITORY" | |
| # Keep only the 2 most recent artifacts per name to stay under storage quota. | |
| prune-artifacts: | |
| needs: build-ubuntu | |
| if: always() && github.event_name != 'pull_request' | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| actions: write | |
| steps: | |
| - name: Delete all but newest 2 artifacts per name | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| REPO: ${{ github.repository }} | |
| run: | | |
| gh api "repos/$REPO/actions/artifacts?per_page=100" --paginate \ | |
| --jq '.artifacts | group_by(.name)[] | sort_by(.created_at) | reverse | .[2:][] | .id' \ | |
| | while read -r id; do | |
| [ -n "$id" ] && gh api -X DELETE "repos/$REPO/actions/artifacts/$id" | |
| done |