Commit Graph
158 Commits
Author SHA1 Message Date
Dylan M. Taylor ea2cae4a03 Match the SonarCloud token fallback the scan actually uses (#139) 2026-11-04 17:59:19 -05:00
Dylan M. Taylor e78816ca65 ci: install WebKitGTK for Sonar coverage builds 2026-11-04 10:00:47 -05:00
Dylan M. Taylor d43ee91f82 ci: install libsoup for Sonar coverage builds 2026-11-04 09:56:06 -05:00
Dylan M. Taylor 7987c57447 ci: prefer org SonarCloud PAT 2026-11-04 09:53:55 -05:00
FredApps 88c42c9714 Merge pull request #123 from nanox333/codex/shared-contributor-generator
Release: provide a shared contributor snapshot generator
2026-11-04 13:54:10 +01:00
FredAppsandClaude Opus 5.5 e09a018c65 Build model titles only from each provider's known words
Anyone can commit under an agent email, so a free-form Git name such as
"Private Person <noreply@anthropic.com>" became a published model title,
which the apps would ship in their About windows. Each provider now lists
the words a model title may use. A name with any other word credits the
agent's default model and repeats none of it; versions are bounded too.

Across the co-author trailers in the 13 apps' history, 18,099 keep their
model row and 7 unusual names now fall back to the default. Also pin that
the PR lookup reads the merge commit rather than the PR head.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 13:49:44 +01:00
FredAppsandClaude Opus 5.5 c2e0e404ab Batch PR lookups gently and ignore bot PR openers
effectcraft's 4,000-commit history made 50-commit association queries time
out on GitHub, so batches are smaller and a failed batch is retried once.
GraphQL names bot openers without the [bot] suffix, which turned dependabot
into a person; only User accounts now count as PR openers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 19:38:06 +01:00
FredAppsandClaude Opus 5.5 fbfdcb1b5e Credit AI agents as models and verify merge-commit and carried PRs
GitHub links agent trailers such as noreply@anthropic.com to the claude and
codex accounts, so they appeared as the top human contributors. Agents are now
recognized by exact Git email or GitHub account, never by name, and credited
only in the snapshot's models (About > Models), including commits an agent
authored itself. Bots are no longer listed as people. Model and version are
read from the agent's Git name, covering every provider the apps' history
uses.

Commits merged with a merge commit or rebase never equal a PR's merge commit,
so self-added names lost verification and unlinked commits lost their author.
GitHub's commit-to-PR association now supplies the opener of the one merged PR
containing the commit. An integration PR opened by a writer that carries the
person's own linked commit also verifies their entry.

Against the shipped snapshots of effectcraft, pdfcraft, photocraft and
lightcraft at their recorded heads, no person loses a row, a name or a commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 19:30:28 +01:00
Kristian Myram ed26e3cd27 Harden contributor consent identities and preference preflight 2026-11-03 12:53:38 +00:00
Kristian Myram 4b2457cec2 Merge main and resolve workflow test trigger conflicts 2026-11-03 12:30:26 +00:00
Dylan M. Taylor eddaf203b2 Merge pull request #129 from dylanmtaylor/feat/linux-signing
feat(release): sign every Linux package format
2026-11-03 00:06:50 -05:00
Dylan M. Taylor 1304973f86 Keep development builds off stable OCI tags 2026-11-03 00:01:47 -05:00
Dylan M. Taylor 67cc91cfd1 Test release signing branch and rollout gates 2026-11-03 00:01:15 -05:00
Dylan M. Taylor f76b6b82d2 Fix Linux signing rollout and review findings 2026-11-03 00:00:15 -05:00
Dylan M. Taylor c351cb5b3e Merge pull request #128 from dylanmtaylor/feat/flatpak-bundle-oci-repo-url
feat(flatpak): make bundle installs update from the ArtCraft OCI repository
2026-11-02 23:56:41 -05:00
Dylan M. Taylor 4da08b882e Merge pull request #98 from g1obalworlds/ci/run-tests-for-every-tested-file
ci: run the unit tests when any workflow or action they cover changes
2026-11-02 22:29:15 -05:00
Dylan M. Taylor 08d40594f5 Merge pull request #97 from g1obalworlds/fix/arch-prerelease-version
arch-package: keep a prerelease version instead of packaging it as 0.0.0
2026-11-02 22:29:08 -05:00
Dylan M. Taylor 2851baf0c0 Merge pull request #130 from storytold/fix/sec-arch-metainfo-read
fix(arch-package): read AppStream metainfo only as a bounded regular file inside staging
2026-11-02 22:29:02 -05:00
Dylan M. Taylor c504d0c57d Merge pull request #131 from storytold/fix/sec-ast-grep-end-of-options
fix(ast-grep): end option parsing before the scanned paths
2026-11-02 22:28:56 -05:00
Dylan M. Taylor 4a817c772b fix(ast-grep): end option parsing before the scanned paths
The paths input is checked to stay inside the checkout, but its original
spelling was then passed to ast-grep where option parsing still applied, so
a checked file named like an option (--update-all, --follow) changed how the
scan ran. Pass "--" before the path list in both scan invocations.
2026-11-02 22:17:40 -05:00
Dylan M. Taylor 8f96383158 fix(arch-package): read AppStream metainfo only as a bounded regular file inside staging
The metainfo path comes from the release archive. A symlink to an endless
stream such as /dev/zero, or a FIFO, made sed read without bound. Refuse a
metainfo entry that is not a regular file resolving inside staging, read at
most 1 MiB of it once, and parse the summary and homepage from that prefix.
2026-11-02 22:16:45 -05:00
Dylan M. Taylor 96b8516a40 feat(release): sign every Linux package format with LINUX_SIGNING_KEY
A new optional LINUX_SIGNING_KEY secret (an unprotected OpenPGP signing subkey, from the
release environment) signs each Linux format the way its tools check it:

- rpm: embedded signature (rpmsign), for `rpm -K` and dnf/zypper gpgcheck
- deb: embedded _gpgorigin member (debsigs) and a detached .asc
- Arch: <file>.sig, which pacman looks for
- AppImage, tar.gz, zsync: detached .asc
- Flatpak bundle: signed commit and embedded public key (flatpak-bundle.sh, via the
  scaffold's new step 4), so `flatpak install` verifies it, plus a detached .asc
- Flatpak OCI image: a containers/image signature for ghcr.io/<repo>@<digest>, which Flatpak
  checks from its signature lookaside; the flatpak job records the pushed manifest for it
- SHA256SUMS.txt.asc over every release asset, and release-signing-key.asc

The draft-release action signs before computing checksums (embedded signatures change the rpm
and deb files) and verifies every signature against the exported public key. The new
import-signing-key action is shared by the flatpak and release jobs and refuses a key that
needs a passphrase. Without the secret, releases are published unsigned with a warning.
2026-11-02 20:55:58 -05:00
Dylan M. Taylor bdbd1e7f5e fix(flatpak): no OCI update source for prereleases; match --repo-url exactly
- A prerelease bundle (a version with `-`, as resolve-version marks it) gets no --repo-url: the
  OCI index serves only the latest stable release, so Flatpak would replace the prerelease
  with that older build. The generated script clears OCI_REPO for such a version and passes
  ${OCI_REPO:+--repo-url="$OCI_REPO"}.
- --verify passes only with the exact URL, the prerelease guard and the option on the active
  build-bundle command; a commented-out command never matches, nor is it edited.
- A script that already sets OCI_REPO or its own --repo-url fails the scaffold instead of being
  reported ready or overwritten.
- The OCI export assertion matches the whole line (CodeRabbit).
2026-11-02 19:46:48 -05:00
Dylan M. Taylor 7e8c2b6c7c feat(flatpak): make bundle installs update from the ArtCraft OCI repository
scaffold-flatpak-oci.sh now also adds --repo-url=oci+https://getartcraft.com to each app's
.flatpak build-bundle command, and --verify reports it. A bundle installed with that URL gets an
origin remote that updates from the OCI index, which points Flatpak at GHCR. Installing such a
bundle over an existing bundle install rewrites the existing origin's URL in place, so existing
users switch over on their next bundle update without a reinstall.
2026-11-02 19:24:22 -05:00
Dylan M. Taylor d6e584f742 Merge pull request #127 from storytold/dependabot/github_actions/actions-b25ed438e6
ci(deps): bump taiki-e/install-action from 2.88.0 to 2.88.1 in the actions group
2026-11-02 17:30:07 -05:00
dependabot[bot] 23552e0010 ci(deps): bump taiki-e/install-action
Bumps the actions group with 1 update: [taiki-e/install-action](https://github.com/taiki-e/install-action).


Updates `taiki-e/install-action` from 2.88.0 to 2.88.1
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/86f7a0ffb25f40114606501a311ebcfaf882ea32...68a389c788b2cd04016ce8c80ee23b80d2ab3d68)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-version: 2.88.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-02 11:16:45 +00:00
g1obalworlds 0a8bd343f6 Merge remote-tracking branch 'upstream/main' into ci/run-tests-for-every-tested-file
# Conflicts:
#	.github/workflows/test-freebsd.yml
2026-11-01 09:52:33 -08:00
g1obalworlds 8ea6648f3e Merge remote-tracking branch 'upstream/main' into fix/arch-prerelease-version
# Conflicts:
#	tests/test_arch.py
2026-11-01 09:51:55 -08:00
Kristian Myram 22db905cd2 fix(release): bind contributor preferences to the release commit 2026-11-01 14:16:19 +01:00
Kristian Myram 65bc9298e4 feat(release): provide the shared contributor snapshot generator 2026-11-01 13:59:31 +01:00
Dylan M. Taylor 44a7db40b1 Merge pull request #106 from dylanmtaylor/docs/no-caller-jobs
docs: app workflows only call these shared workflows; app-specific checks move here
2026-11-01 01:06:51 -04:00
Dylan M. Taylor 75fbd9b7b5 Merge pull request #96 from g1obalworlds/fix/supply-chain-gh-repo
supply-chain: name the repository for the SBOM upload
2026-11-01 01:06:07 -04:00
Dylan M. Taylor 40191f5daf Merge pull request #112 from storytold/fix/flatpak-eu-strip
fix(flatpak): install elfutils so flatpak-builder can eu-strip modules
2026-11-01 01:05:04 -04:00
Dylan M. Taylor 7ee7f15d22 Merge branch 'main' into fix/flatpak-eu-strip 2026-11-01 01:04:49 -04:00
Dylan M. Taylor 817ac1cb88 Merge pull request #99 from g1obalworlds/sonar-shard-exclude-tests
sonarcloud: leave test code out of sharded coverage, as cargo llvm-cov does
2026-11-01 01:03:24 -04:00
Dylan M. Taylor 09a83a41f5 Merge pull request #101 from ZIDAN44/fix/arch-xkbcommon-x11
fix(arch-package): depend on libxkbcommon-x11, without which the window can't open
2026-11-01 01:02:40 -04:00
Dylan M. Taylor 925395fde6 Merge pull request #107 from storytold/dependabot/github_actions/actions-a6a2a90062
ci(deps): bump the actions group across 1 directory with 2 updates
2026-11-01 01:01:19 -04:00
Dylan M. Taylor 2ce6aa59c7 Merge pull request #110 from nanox333/codex/release-contributor-refresh
Release: refresh contributor credits automatically before builds
2026-11-01 01:00:55 -04:00
Dylan M. Taylor 841376d7a9 Merge pull request #119 from storytold/ci/gate-optional-packages
feat(gate): packages is optional; an empty list installs none
2026-11-01 00:59:32 -04:00
dependabot[bot] 7d24ca64b1 ci(deps): bump the actions group across 1 directory with 2 updates
Bumps the actions group with 2 updates in the / directory: [taiki-e/install-action](https://github.com/taiki-e/install-action) and [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action).


Updates `taiki-e/install-action` from 2.87.33 to 2.88.0
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Changelog](https://github.com/taiki-e/install-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/taiki-e/install-action/compare/645d1ab48b3cb8591684a8b730b2ccf4cb3f9568...86f7a0ffb25f40114606501a311ebcfaf882ea32)

Updates `SonarSource/sonarqube-scan-action` from 8.3.0 to 8.4.0
- [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases)
- [Commits](https://github.com/sonarsource/sonarqube-scan-action/compare/d209202bc7d53ff1cc128f7f907dac145c9d6ae9...4d1dc0c91ee400dcf8a6dddf2f705ac36542e304)

---
updated-dependencies:
- dependency-name: SonarSource/sonarqube-scan-action
  dependency-version: 8.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: taiki-e/install-action
  dependency-version: 2.87.32
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-11-01 04:35:59 +00:00
52dc54c75e ci: pin install-action v2.87.33, the first that knows cargo-nextest 0.9.150 (#122)
v2.87.29 knows nextest only up to 0.9.148, so every gate and coverage run that installs the
pinned cargo-nextest@0.9.150 fell back to cargo-binstall@latest: an unpinned download, then a
binstall of nextest. v2.87.33 is the oldest release whose manifest has 0.9.150; the releases
since v2.87.29 change only tool manifests.

Co-authored-by: FredApps <FredApps@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 05:32:27 +01:00
Dylan M. Taylor c926ea426a fix: retry macOS release verification (#121) 2026-10-31 23:58:50 -04:00
Dylan M. Taylor 37960c37b5 fix: pass Linux tarball to Flatpak OCI publishing (#120) 2026-10-31 23:50:07 -04:00
FredAppsandClaude Opus 5.5 0cb1ecf84c docs(gate): spell out os and targets in the second-call example
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 04:46:49 +01:00
FredAppsandClaude Opus 5.5 c1f5c18c01 feat(gate): packages is optional; an empty list installs none
Calls with nothing to install from apt (a Windows-only check, a wasm build) had to pass a package
list the gate would ignore or install for nothing. packages now defaults to empty, and the apt step
runs only on Linux legs that name packages. The README describes such second gate calls, with
their own command and cache-version, instead of keeping web builds in the app's own workflow:
the apps' CI rules now allow only calls to shared workflows (#118).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 04:26:35 +01:00
e031880d47 fix(install-apt-packages): time-limit and retry mirror downloads (#117)
* fix(install-apt-packages): time-limit and retry mirror downloads

A SonarCloud job in vectorcraft (run 41253493430) sat in this step for 58 minutes: the Azure
Ubuntu mirror timed out, apt fell back to archive.ubuntu.com, then a connection went silent and
apt printed nothing until the run was cancelled. Acquire::http::Timeout doesn't end a connection
that stays open, so the job's 90-minute timeout was the only bound.

apt-get update and a new --download-only pass now each run under timeout(1), 300 s per attempt,
up to 3 attempts. The install itself then works from downloaded files only, so dpkg is never
killed mid-configure. Acquire::https::Timeout is set alongside the http one for the HTTPS fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(install-apt-packages): retry an update that fetched only some indexes

apt-get update warns and exits 0 when an index fails to download, so the retry never ran for
it. APT::Update::Error-Mode=any makes that a failure, which is retried. If indexes are still
missing after the last attempt the step continues with a warning, as it did before: they often
belong to a repository the packages don't need, and a package that needs one fails the download.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: FredApps <FredApps@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 02:05:24 +01:00
84ad881711 ci(windows-arm64): only main saves the packaging cache (#116)
Pull requests that touch Windows packaging saved their own windows-arm64-package cache (about
0.7 GB), visible only to that pull request. Every app repository is at the 10 GB cache limit,
so each one evicted a cache main's gate restores. The nightly run on main still saves it.

Co-authored-by: FredApps <FredApps@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 01:39:08 +01:00
Dylan M. Taylor 09f920c3f4 feat: add Flatpak OCI repository scaffolding script and tests (#115) 2026-10-31 15:43:24 -04:00
Dylan M. Taylor 5cd19d05cb ci(flatpak): publish Flatpak OCI layout to GHCR alongside Flatpak builds (#113) 2026-10-31 15:33:04 -04:00
Brandon ThomasandClaude Opus 5.5 5d6a81953e fix(flatpak): install elfutils so flatpak-builder can eu-strip modules
flatpak-builder only Recommends elfutils, which --no-install-recommends skips. Apps whose
manifests now build cups-client from source (gridcraft, designcraft, wordcraft, pdfcraft) fail
in the Flatpak job with: Failed to execute child process "eu-strip".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 23:14:08 -04:00