Files
NilsBriggen 098cbf48f5
CI / pull_request_policy (push) Skipped
CI / markdown (push) Successful in 14s
CI / build (push) Successful in 1m34s
Install binutils for Linux release packaging
2026-09-25 00:06:39 +02:00

4.7 KiB

Gitea Actions and release setup

Gitea runs CI, pull request checks, translation reports, and the manual release workflow from .gitea/workflows. Gitea reads that directory before .github/workflows. The one workflow in .github/workflows runs hosted Windows and macOS packaging jobs on the public GitHub mirror. The inherited upstream GitHub workflows are removed. The Gitea runner fetches the standard helper actions from github.com/actions.

Gitea runner

The Ubuntu server's existing act_runner keeps its ubuntu-latest container label for CI. The manual release additionally needs these two labels:

Label Execution image Purpose
linux-amd64 catthehacker/ubuntu:act-latest JDK 21 build, tests, JAR, sources, DEB and RPM
linux-arm64 arm64v8/ubuntu:24.04 ARM64 DEB and RPM under host QEMU binfmt

The runner configuration uses docker:// labels and container.docker_host: "-". Jobs have no access to the host Docker socket. On the current Ubuntu 26.04 host, install qemu-user-binfmt and check ARM64 execution before starting a release:

sudo apt-get install qemu-user-binfmt
docker pull --platform linux/arm64 arm64v8/ubuntu:24.04
docker run --rm arm64v8/ubuntu:24.04 uname -m

The check must print aarch64 (Docker may warn about the host architecture). Keep this ARM64 image on the server: act_runner cannot pull an ARM-only image using the host's default x86_64 platform. The ARM64 job installs an ARM64 JDK 21 inside its container, so jpackage embeds an ARM64 runtime. It uses the public Gitea source repository at the exact workflow commit. Both Linux jobs install fakeroot, RPM tools, and binutils for jpackage (which calls objcopy). ARM64 emulation is slower than a native ARM machine; the job timeout is four hours.

GitHub hosted Windows and Mac jobs

The public mirror's .github/workflows/platforms.yml uses standard windows-2022, macos-15-intel, and macos-15 runners. Windows Server 2022 includes WiX Toolset 3; the workflow adds it to PATH for jpackage. Each job checks that the snapshot's Git tree matches the Gitea manual run, builds its native package, and uploads a one-day GitHub Actions artifact. The Gitea workflow downloads these artifacts into a draft Gitea release. The macOS DMGs are development packages without Apple notarization.

GitHub's billing documentation says standard hosted runner time is free for public repositories. Do not switch the mirror to private or a larger runner without checking the billing settings.

Tokens and manual release

In Gitea Repository Settings → Actions → General, enable Actions and permit the job token Code: read and Releases: write. The workflow uses its built-in GITEA_TOKEN for draft creation and attachment uploads. Store a GitHub token in the Gitea repository Actions secret GH_TOKEN. It needs access only to the public NilsBriggen/Logisim-Revolution mirror with Contents: read and write and Actions: read and write. It pushes a history-free snapshot of the Gitea source tree to GitHub main, dispatches the hosted workflow, checks its result, and downloads its artifacts. The GitHub workflow receives no Gitea credential.

In Gitea's Actions tab, select Build all platforms and publish release and run it on main. It creates a draft prerelease tagged build-<run-id>-attempt-<attempt>, builds Linux x86_64 and emulated ARM64 locally, and dispatches the Windows and Mac jobs. It publishes the Gitea release only when every job succeeds and all ten expected files are present and nonempty. A failure leaves the draft unpublished for inspection. A rerun uses a new attempt tag.

The ten files are a portable application JAR and source JAR, DEB and RPM for each Linux architecture, a Windows x86_64 MSI and portable ZIP, and Intel and Apple Silicon DMGs. Package names are derived from gradle.properties and checked before publication. There is no automatic nightly release or Snap Store upload.

Other CI checks

CI runs the full Gradle build, Java Checkstyle, changed maintained Markdown lint, and PR changelog and issue checks. A PR may use NO_CHANGELOG_ENTRY, NO_CHANGELOG_AUTHOR_CREDIT, or NO_TICKET in its description when the corresponding requirement does not apply. The post-merge workflow locks merged PRs and closed linked issues using the Gitea API. Translation checks remain advisory because the inherited bundles contain known issues. Gitea's built-in issue dependencies replace the old GitHub-only action. Gitea does not support the security-events token scope required by the old CodeQL upload.