Commit Graph
14 Commits
Author SHA1 Message Date
agw 8f5bd0953f Build JASP 0.98.8 and start the nightly run at 22:00
JASP 0.98.8 requires the Qt NetworkAuth component, so the build installs
qt6-networkauth and the package depends on it at runtime. Without it CMake
stopped at configure and the run failed every evening.

The scheduled run now starts at 22:00 Danish time instead of 18:00, so the
hours-long build no longer competes with evening use of the runner host.

Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
2026-10-13 21:48:37 +02:00
agw 9670afa6d4 Read the tarball host and path from secrets, not variables
Run logs of a public repository are public, and Gitea prints variables in
them in clear text; only secrets are masked. They are now set only on the
publish step, the one step that needs them.

Claude-Session: https://claude.ai/code/session_01GGe7kUhooMFuzY6GaDb2w9
2026-10-01 17:48:00 +02:00
agw aa08dc108e Keep infrastructure details out of the repository
The README, the publish script and the workflow named the tarball host, its
address and filesystem paths on the web host and the runner. Hosts and paths
now come only from repository variables, and the workflow shares the work
tree and the build cache through the named Docker volumes jasp-build and
jasp-cache instead of host paths. (The runner does not expand ${{ vars }} in
container.volumes, so a variable could not have replaced the host path there.)

Also drop the unused scripts/gen-tarball-index.py, and give each module build
its own process under a time limit: a module once spun for eight hours in
jaspModuleTools' bundling step and stalled the whole build.

Claude-Session: https://claude.ai/code/session_01GGe7kUhooMFuzY6GaDb2w9
2026-10-01 17:05:00 +02:00
agw e8c3d775aa Run the scheduled build in the evening
The AUR push is made under the maintainer's name and should land in the
evening rather than during working hours. At 16:00 UTC a two-hour build
publishes around 19:00-20:30 local time.

Claude-Session: https://claude.ai/code/session_01GGe7kUhooMFuzY6GaDb2w9
2026-09-30 22:15:00 +02:00
agw 3c3980278a Put everything that publishes behind a PUBLISH repo variable
So the pipeline can be run end to end as a dry run before it is trusted with
the tarball host, state.json and the AUR.

Claude-Session: https://claude.ai/code/session_01GGe7kUhooMFuzY6GaDb2w9
2026-09-30 21:05:00 +02:00
agw 5601c0eb96 Keep build caches across runs so a rebuild compiles only what changed
Every build started from an empty container and recompiled R, JASP and 1000+
R packages, which is days of CPU on the runner. Now:

- /srv/jasp-cache on the host holds ccache and the renv package cache, linked
  into the paths jaspModuleTools::compile() hard-codes.
- RENV_PATHS_PREFIX is fixed: renv otherwise keys the cache on the archlinux
  image's build date, so any newer image started cold.
- Cached packages with unresolved sonames after an Arch update are purged, so
  only those are rebuilt.
- R packages compile without -g (the Stan/Eigen ones spend real time and GBs of
  memory on debug info), and retry passes skip modules that already built.

Claude-Session: https://claude.ai/code/session_01GGe7kUhooMFuzY6GaDb2w9
2026-09-30 19:55:00 +02:00
agw 9ae157c97a Compile R packages single-job and require swap on the runner
jaspMixedModels stalled at 6/7 for three passes on rstanarm:

  g++: fatal error: Killed signal terminated program cc1plus
  ERROR: compilation failed for package 'rstanarm'

Stan generates translation units where one cc1plus wants 4-8 GB. At -j2 on a
9 GB container that is an instant kill, and the symptom is simply a module
that never appears - the same shape as the OpenMx failure earlier, and just
as easy to mistake for something else.

Default R_JOBS to 1, and give the runner swap so an over-commit degrades into
a slow compile instead of a dead one. Documented in the runner requirements,
since a fresh runner without swap would hit this too.
2026-09-03 20:35:00 +02:00
agw f3a6822744 Self-host tarballs on asger.weirsoe.dk instead of GitHub Releases
Serve from /srv/tarballz on CT148 via a 'location /tarballz/' alias, NOT
from under /var/www/asger: the asger-web deploy swaps that whole directory
atomically, so tarballs kept inside it would be deleted on the next site
deploy. CT148's rootfs was 3G with 2.7G free - one tarball would have
filled it - so it is grown to 15G; speedy's thin pool has room even though
vgs reports the VG nearly full.

Publishing uploads to a .part name and renames on arrival so a download can
never see a truncated file, verifies sha256 on the host, then fetches the
public URL and checks it against the sha256 baked into the PKGBUILD. Both
checks run before the AUR push, so the package cannot go out pointing at a
missing file. Old tarballs are pruned to the newest three.

GH_TOKEN is kept but demoted to an optional GITHUB_PAT for R module
downloads; it no longer has anything to do with publishing.
2026-09-01 22:50:00 +02:00
agw f0f317ca2f Document binary provenance in the PKGBUILD header
Checked what the AUR actually requires rather than relying on my earlier
assumption. The submission guidelines say only that packages using prebuilt
deliverables must carry the -bin suffix; nothing requires the binary to come
from upstream, so -bin is correct and sufficient here.

There is no formal 'unofficial binary' flag, so disclose it where users look:
an explicit PROVENANCE block in the PKGBUILD comment header naming the tag,
commit, build recipe and release URL, plus '(prebuilt binary)' in pkgdesc.

Corrects the README, which overstated the risk of a maintainer objecting.
2026-09-01 22:30:00 +02:00
agw 56434ba7ed Bundle non-system libraries instead of version-pinning depends
Bundling R alone was not enough: R links libicuuc, and Arch moves ICU
regularly. The obvious fix - pinning 'icu>=78 <79' in depends - is worse
than the disease on a rolling distro, because pacman would then refuse to
upgrade ICU while JASP is installed, blocking the user's whole system
upgrade until a rebuild lands.

So bundle-libs.sh copies every non-system shared library into
/opt/jasp-desktop/lib and rewrites rpaths, by denylist rather than
allowlist. depends now carries no version constraints at all.

Qt6 stays system-provided on purpose - Qt is binary compatible across Qt 6
minors, and bundling QtWebEngine would add ~500 MB. That also means the
only rebuild triggers left are a new JASP release and a Qt major bump;
rebuilding for anything else would cost users a 1.7 GB re-download.

Also fixes check-upstream.py querying only repo=Extra, which silently
returned nothing for icu (it lives in core).
2026-09-01 22:05:00 +02:00
agw d880e6748c Bundle our own R 4.5.3 instead of building against Arch's R
Arch ships R 4.6.1, but JASP pins its R packages against a frozen CRAN
snapshot (2026-03-31 for 0.98.1) that targets R 4.5. Configuring against
Arch's R fails at Rcpp 1.1.1, which cannot compile on R 4.6 since
R_NamespaceRegistry was removed; the Rcpp release that fixes it is newer
than the pinned snapshot, so the lockfile cannot reach it either.

Build R 4.5.3 into /opt/jasp-desktop/R and point R_HOME at it, matching
what upstream CI does. This drops 'r' from depends entirely, so an Arch R
upgrade can no longer break an installed JASP, and the rebuild triggers
become Qt6 and ICU - the libraries actually still linked against.
2026-09-01 21:40:00 +02:00
agw 3ad88f9b0d Rename GITEA_TOKEN secret to STATE_PUSH_TOKEN
Gitea rejects secret names starting with the reserved GITEA_ prefix.
2026-09-01 21:20:00 +02:00
agw 92961bd7b3 Align AUR publishing with the existing pi3-smart-workspace pattern
Reuse the established conventions rather than inventing new ones: the
AUR_SSH_PRIVATE_KEY secret name, pushing from an archlinux:base-devel
job container instead of docker-in-docker, and the existing git identity.

The AUR job only needs the PKGBUILD, so the 1.5 GB tarball never crosses
a job boundary - it goes straight to GitHub Releases from the build job.

Also correct the Gitea job-timeout setting name to ENDLESS_TASK_TIMEOUT.
2026-09-01 21:10:00 +02:00
agw 0d4db32d5c Automated Arch binary builds of JASP for the AUR
Build JASP binary and publish to AUR / build (push) Failing after 12s
Build JASP binary and publish to AUR / check (push) Successful in 10s
Upstream JASP ships no Linux binary, so the existing AUR package builds
everything from source including several hundred R packages. This builds
that once in CI and publishes the result as jasp-desktop-bin.

JASP links against the system R and Qt6 rather than bundling them, so a
rebuild is triggered by an Arch r/qt6-base bump as well as by a new JASP
release, and the generated PKGBUILD pins depends to the versions actually
built against.
2026-09-01 20:30:00 +02:00