# Paperdoll Renderer — BlueGit CI (git.timfalken.com). # # Syntax checked on 6 November 2026 against GET /api/v1/ci/spec, # timfa/bluegit docs/CI.md, and the public pipelines of timfa/posprint, # timfa/minecart-trains and timfa/click-tween. legacy-cycles publishes # releases only; its pipeline file is not public and was not copied. # # Requested graph: # merge request and master/main push -> test # tag push, after tests succeed -> AppImage, Ubuntu package, Arch package, # Windows build, artifact check, then one release publish # # Verified release limit: POST /repos/$CI_PROJECT_PATH/releases creates the # git tag. opPublishRelease returns 409 when that tag already exists. # replace=true is rejected on a tag pipeline (403, checkReplace). scripts/ci/release.sh # still performs the documented call and fails on a non-2xx response. This # file does not create a tag by itself. No release has been started here. # # posprint notes two runner facts used below: jobs start in the checkout # (CI_PROJECT_DIR is not set), and artifact paths are exact files. # Windows is cross-compiled with MinGW, the same reason posprint gives: # no Windows runner on BlueGit. stages: [test, package, verify, release] variables: CARGO_TERM_COLOR: always RUST_BACKTRACE: "1" CARGO_PROFILE_DEV_DEBUG: "false" CARGO_PROFILE_TEST_DEBUG: "false" workflow: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == "master" - if: $CI_COMMIT_BRANCH == "main" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_TAG != "" .rust: image: rust:1.96-bookworm timeout: 2h before_script: - export CARGO_HOME="$PWD/cargo-home" - export PATH="$CARGO_HOME/bin:$PATH" - apt-get update -qq - apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev python3 .on_tag: rules: - if: $CI_COMMIT_TAG != "" test: extends: .rust stage: test interruptible: true cache: key: cargo-test paths: [target/, cargo-home/] rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == "master" - if: $CI_COMMIT_BRANCH == "main" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_TAG != "" script: - cargo fmt --check - cargo check --workspace --all-targets --locked - cargo clippy --workspace --all-targets --locked -- -D warnings - cargo test --workspace --locked package:appimage: extends: [.rust, .on_tag] stage: package needs: [test] interruptible: true cache: key: cargo-linux paths: [target/, cargo-home/] before_script: - export CARGO_HOME="$PWD/cargo-home" - export PATH="$CARGO_HOME/bin:$PATH" - apt-get update -qq - apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev file script: - bash scripts/package/appimage.sh artifacts: paths: [dist/paperdoll-renderer-x86_64.AppImage] expire_in: 30d package:ubuntu: extends: [.rust, .on_tag] stage: package needs: [test] interruptible: true cache: key: cargo-linux paths: [target/, cargo-home/] before_script: - export CARGO_HOME="$PWD/cargo-home" - export PATH="$CARGO_HOME/bin:$PATH" - apt-get update -qq - apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev dpkg-dev script: - bash scripts/package/deb.sh artifacts: paths: [dist/paperdoll-renderer_amd64.deb] expire_in: 30d package:arch: extends: .on_tag stage: package image: archlinux/archlinux:base-devel timeout: 2h needs: [test] interruptible: true script: - pacman -Syu --noconfirm - pacman -S --noconfirm --needed rust pkgconf libxkbcommon libxcb libx11 libglvnd git - bash scripts/package/arch.sh artifacts: paths: [dist/paperdoll-renderer-x86_64.pkg.tar.zst] expire_in: 30d # MinGW cross build. posprint documents this because BlueGit has no Windows runner. package:windows: extends: [.rust, .on_tag] stage: package needs: [test] interruptible: true cache: key: cargo-windows paths: [target/, cargo-home/] before_script: - export CARGO_HOME="$PWD/cargo-home" - export PATH="$CARGO_HOME/bin:$PATH" - apt-get update -qq - apt-get install -y -qq gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64 zip - rustup target add x86_64-pc-windows-gnu script: - bash scripts/package/windows.sh artifacts: paths: [dist/paperdoll-renderer-windows-x86_64.zip] expire_in: 30d verify:packages: stage: verify image: bluegit/base extends: .on_tag needs: [package:appimage, package:ubuntu, package:arch, package:windows] script: - bash scripts/ci/verify-packages.sh artifacts: paths: [dist/SHA256SUMS] expire_in: 30d release: stage: release image: bluegit/base extends: .on_tag needs: [verify:packages, package:appimage, package:ubuntu, package:arch, package:windows] resource_group: release script: - bash scripts/ci/release.sh