Address review feedback on the Amiga packaging PR.

Keep Amiga-specific files under amiga/, cache the pinned LHa binary in
CI, and make it explicit that the workflow artifact is not an official
release.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Cameron Armstrong (Nightfox)andCursor committed 2026-08-30 23:28:43 +08:00
1 parent 385c46ef39
commit 083d244d9a
5 files changed
+37 -18

No files matched your search

+19 -4
View File
@@ -1,5 +1,10 @@
name: amiga name: amiga
# Verifies that AmigaOS 3/4 and MorphOS still cross-compile. The uploaded
# json-c.lha is a CI convenience artifact only — official json-c releases
# remain source-only. Aminet uploads are a separate, manual process and
# are not published from this job.
on: [push, pull_request, workflow_dispatch] on: [push, pull_request, workflow_dispatch]
concurrency: concurrency:
@@ -14,11 +19,19 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 120 timeout-minutes: 120
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v7
# Ubuntu's `lha` package is lhasa: extract-only, cannot create archives. # Ubuntu's `lha` package is lhasa: extract-only, cannot create archives.
# Build LHa for UNIX (https://github.com/jca02266/lha) instead. # Build LHa for UNIX (https://github.com/jca02266/lha) instead.
- name: Cache LHa for UNIX
id: cache-lha
uses: actions/cache@v6
with:
path: ~/.local/bin/lha
key: lha-16619b066b189ef289bb8b07b37d1c38d550da99-${{ runner.os }}
- name: Install LHa for UNIX - name: Install LHa for UNIX
if: steps.cache-lha.outputs.cache-hit != 'true'
working-directory: ${{runner.temp}} working-directory: ${{runner.temp}}
run: | run: |
sudo apt-get update sudo apt-get update
@@ -31,7 +44,9 @@ jobs:
./configure --prefix="$HOME/.local" ./configure --prefix="$HOME/.local"
make -j"$(nproc)" make -j"$(nproc)"
make install make install
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Add LHa to PATH
run: echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Check lha can create archives - name: Check lha can create archives
run: | run: |
@@ -49,9 +64,9 @@ jobs:
wait wait
- name: Build and package - name: Build and package
run: ./package-amiga.sh run: ./amiga/package-amiga.sh
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v7
with: with:
name: json-c.lha name: json-c.lha
path: dist/json-c.lha path: dist/json-c.lha
+7 -5
View File
@@ -275,7 +275,9 @@ make install
Building for Commodore Amiga or MorphOS Building for Commodore Amiga or MorphOS
---------------------- ----------------------
Building for Commodore Amiga is supported for both Motorola 68k (AmigaOS 3) and PowerPC (AmigaOS 4) architectures. MorphOS on compatible PowerPC hardware is also supported. You can set up a cross compiler locally, however it is much easier to use the already preconfigured Amiga development environment wtthin a Docker container. Building for Commodore Amiga is supported for both Motorola 68k (AmigaOS 3) and PowerPC (AmigaOS 4) architectures. MorphOS on compatible PowerPC hardware is also supported. You can set up a cross compiler locally, however it is much easier to use the already preconfigured Amiga development environment within a Docker container.
Included below are instructions for building for specific individual systems, as well as how to build for *all* Amiga variants.
Install Docker on your machine if you don't already have it. You can download Docker Desktop for Windows/macOS/Linux [here](https://www.docker.com/products/docker-desktop/). Install Docker on your machine if you don't already have it. You can download Docker Desktop for Windows/macOS/Linux [here](https://www.docker.com/products/docker-desktop/).
@@ -384,19 +386,19 @@ cmake -DMORPHOS_BASEREL32=ON ..
### Building and packaging every variant ### Building and packaging every variant
Two scripts at the repository root build the whole matrix across all three Two scripts in the `amiga/` directory build the whole matrix across all three
systems, so you do not have to drive the container by hand. systems, so you do not have to drive the container by hand.
* `build-amiga-sdk.sh [OS ...]` — builds every variant and installs * `amiga/build-amiga-sdk.sh [OS ...]` — builds every variant and installs
`libjson-c.a` plus the `json-c/` headers into an SDK tree. The location comes `libjson-c.a` plus the `json-c/` headers into an SDK tree. The location comes
from `$AMIGA_SDK` (default `/opt/amiga`); either a `<target>/` or an from `$AMIGA_SDK` (default `/opt/amiga`); either a `<target>/` or an
AmigaSDK-gcc-style `amigaos3/sdk/<target>/` layout is accepted, and an OS AmigaSDK-gcc-style `amigaos3/sdk/<target>/` layout is accepted, and an OS
whose subdirectory is absent is skipped rather than failing. whose subdirectory is absent is skipped rather than failing.
* `package-amiga.sh [OS ...]` — builds the same matrix into a staging tree and * `amiga/package-amiga.sh [OS ...]` — builds the same matrix into a staging tree and
produces `dist/json-c.lha` for distribution. produces `dist/json-c.lha` for distribution.
Both default to `AmigaOS3 AmigaOS4 MorphOS`, and both take the variant list Both default to `AmigaOS3 AmigaOS4 MorphOS`, and both take the variant list
from the same table in `build-amiga-sdk.sh`, so they cannot disagree. 22 from the same table in `amiga/build-amiga-sdk.sh`, so they cannot disagree. 22
libraries are built in total: 15 for AmigaOS 3 (newlib, libnix and clib2, each libraries are built in total: 15 for AmigaOS 3 (newlib, libnix and clib2, each
across the five multilib slots), 3 for AmigaOS 4 (newlib, clib2, clib4) and 4 across the five multilib slots), 3 for AmigaOS 4 (newlib, clib2, clib4) and 4
for MorphOS (ixemul and native, each with and without `-mbaserel32`). for MorphOS (ixemul and native, each with and without `-mbaserel32`).
@@ -2,14 +2,15 @@
# Cross-build json-c for Amiga systems across every multilib slot and install # Cross-build json-c for Amiga systems across every multilib slot and install
# the archives plus headers into an SDK tree. # the archives plus headers into an SDK tree.
# #
# ./build-amiga-sdk.sh [OS ...] # default: AmigaOS3 AmigaOS4 MorphOS # ./amiga/build-amiga-sdk.sh [OS ...] # default: AmigaOS3 AmigaOS4 MorphOS
# #
# SDK location comes from $AMIGA_SDK (default /opt/amiga). # SDK location comes from $AMIGA_SDK (default /opt/amiga).
set -uo pipefail set -uo pipefail
SDK=${AMIGA_SDK:-/opt/amiga} SDK=${AMIGA_SDK:-/opt/amiga}
cd "$(dirname "$0")" AMIGA_DIR=$(cd "$(dirname "$0")" && pwd)
ROOT=$PWD ROOT=$(cd "$AMIGA_DIR/.." && pwd)
cd "$ROOT"
OSES=("$@"); [[ ${#OSES[@]} -eq 0 ]] && OSES=(AmigaOS3 AmigaOS4 MorphOS) OSES=("$@"); [[ ${#OSES[@]} -eq 0 ]] && OSES=(AmigaOS3 AmigaOS4 MorphOS)
# os | image tag | sdk subdir # os | image tag | sdk subdir
+1 -1
View File
@@ -1,5 +1,5 @@
Short: JSON parser and generator library (static libs + headers) Short: JSON parser and generator library (static libs + headers)
Author: Michael Clark, Eric Haszlakiewicz et al. Author: Michael Clark, Eric Hawicz et al.
Uploader: Cameron Armstrong (Nightfox) <cameronscottarmstrong@gmail.com> Uploader: Cameron Armstrong (Nightfox) <cameronscottarmstrong@gmail.com>
Type: dev/lib Type: dev/lib
Version: 0.19 Version: 0.19
+6 -5
View File
@@ -2,7 +2,7 @@
# Build every json-c variant for the requested Amiga systems and package them # Build every json-c variant for the requested Amiga systems and package them
# into dist/json-c.lha. # into dist/json-c.lha.
# #
# ./package-amiga.sh [OS ...] # default: all three # ./amiga/package-amiga.sh [OS ...] # default: all three
# #
# Archive layout (single directory at the root): # Archive layout (single directory at the root):
# json-c/json-c.readme # json-c/json-c.readme
@@ -11,8 +11,9 @@
# json-c/MorphOS/... # json-c/MorphOS/...
set -uo pipefail set -uo pipefail
cd "$(dirname "$0")" AMIGA_DIR=$(cd "$(dirname "$0")" && pwd)
ROOT=$PWD ROOT=$(cd "$AMIGA_DIR/.." && pwd)
cd "$ROOT"
DIST=$ROOT/dist DIST=$ROOT/dist
STAGE=$DIST/stage STAGE=$DIST/stage
OSES=("$@"); [[ ${#OSES[@]} -eq 0 ]] && OSES=(AmigaOS3 AmigaOS4 MorphOS) OSES=("$@"); [[ ${#OSES[@]} -eq 0 ]] && OSES=(AmigaOS3 AmigaOS4 MorphOS)
@@ -32,7 +33,7 @@ rm -rf "$_lha_probe"
# script's SDK layout ($SDK/<target>) is the same shape we want per OS, so each # script's SDK layout ($SDK/<target>) is the same shape we want per OS, so each
# OS gets staged under its own directory. # OS gets staged under its own directory.
rm -rf "$DIST"; mkdir -p "$STAGE/json-c" rm -rf "$DIST"; mkdir -p "$STAGE/json-c"
cp "$ROOT/json-c.readme" "$STAGE/json-c/json-c.readme" cp "$AMIGA_DIR/json-c.readme" "$STAGE/json-c/json-c.readme"
built=() built=()
for os in "${OSES[@]}"; do for os in "${OSES[@]}"; do
@@ -47,7 +48,7 @@ for os in "${OSES[@]}"; do
echo "=== $os ===" echo "=== $os ==="
# Stage whatever landed even if some variants failed -- a single unsupported # Stage whatever landed even if some variants failed -- a single unsupported
# multilib should not drop the whole OS from the archive. # multilib should not drop the whole OS from the archive.
AMIGA_SDK="$tmp" ./build-amiga-sdk.sh "$os" || echo " ($os: some variants failed, see above)" AMIGA_SDK="$tmp" "$AMIGA_DIR/build-amiga-sdk.sh" "$os" || echo " ($os: some variants failed, see above)"
if [[ -n $(find "$tmp/$sub" -name 'libjson-c.a' -print -quit 2>/dev/null) ]]; then if [[ -n $(find "$tmp/$sub" -name 'libjson-c.a' -print -quit 2>/dev/null) ]]; then
mkdir -p "$STAGE/json-c/$os" mkdir -p "$STAGE/json-c/$os"
cp -a "$tmp/$sub/." "$STAGE/json-c/$os/" cp -a "$tmp/$sub/." "$STAGE/json-c/$os/"