Add CI/CD pipeline, GitHub Releases, and in-repo Docker support#586
Open
jlaska wants to merge 8 commits into
Open
Add CI/CD pipeline, GitHub Releases, and in-repo Docker support#586jlaska wants to merge 8 commits into
jlaska wants to merge 8 commits into
Conversation
- Remove AirConnect-1.10.0.zip and !AirConnect*.zip gitignore exception; binaries now live exclusively in GitHub Releases (closes philippe44#577) - Add .github/workflows/ci.yml: build validation on every push/PR for Linux (x86_64, aarch64, arm, armv6), macOS (arm64), and Windows (Win32) - Add .github/workflows/release.yml: tag-triggered workflow that builds all platforms, uploads individual binaries and a combined zip as release assets (closes philippe44#579) - Add .github/workflows/docker.yml: publishes multi-arch (amd64 + arm64) images to ghcr.io/jlaska/airconnect on every release tag - Add docker/Dockerfile and docker/docker-entrypoint.sh: multi-stage build from source, minimal debian:bookworm-slim runtime, AIRCONNECT_MODE env var to select aircast | airupnp | both (default) - Add docker-compose.yml with host networking for mDNS/SSDP discovery - Add .dockerignore - Update README: Docker pull instructions, Releases page download link, CI badge; remove stale wget-from-master-branch instructions Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The prebuilt linux/arm library archives were compiled with hard-float ABI (VFP register arguments). arm-linux-gnueabi-gcc (soft-float) cannot link against them; arm-linux-gnueabihf-gcc (hard-float) is required. The armv6 target correctly uses gnueabi (soft-float libs). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Without a .sln, $(SolutionDir) resolves to the vcxproj directory (aircast\ or airupnp\), not the repo root. Pass /p:OutDir explicitly so all binaries land in bin\, then rename to the release convention. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
gcc alone doesn't pull in libc-dev on Debian. build-essential includes gcc, make, and the standard C headers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Workflows already use ${{ github.repository_owner }} and are
namespace-agnostic. Update README and docker-compose.yml so the
PR is ready to use as-is when merged into philippe44/AirConnect.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Using jlaska namespace for testing in the fork; these will be updated to philippe44 before the upstream PR is merged. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Badges now sit at the very top of the README before the h1 title, which is standard practice. All references updated from jlaska to philippe44 so the change is PR-ready. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add x86, armv5, mips, mipsel, sparc64, and powerpc to CI and release workflows using standard apt cross-compiler packages. Special CFLAGS from build.sh applied per target (-march=mips32, -mcpu=v7, etc.). This brings automated platform coverage to 10 Linux targets + macOS universal + Windows, matching all platforms except FreeBSD and Solaris which have no available CI runners. Also reorder README: standalone binary install leads, Docker section follows. Note FreeBSD/Solaris require manual builds via build.sh. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR proposes three improvements:
aptcross-compilers (no custom toolchain needed — the submodules already ship prebuilt.aarchives)All changes have been validated end-to-end in a fork before opening this PR.
Summary
Addresses #577 and #579.
AirConnect-1.10.0.zipfrom the tree and the.gitignoreexception, so release artifacts live in GitHub Releases going forward.ci.yml) — validates every push and PR across 10 Linux targets (x86, x86_64, arm, armv5, armv6, aarch64, mips, mipsel, sparc64, powerpc), macOS (arm64 + x86_64 universal), and Windows (Win32) using standard GitHub-hosted runners andaptcross-compilers. FreeBSD and Solaris are excluded (no CI runners available);build.shremains fully functional for manual builds of those platforms.release.yml) — triggered byv*tags. Builds all automated platforms, uploads each binary as an individual release asset (as requested in Better release structure #579), and also produces a combined zip for backward compatibility.docker.yml+docker/Dockerfile) — multi-stage build from source, published toghcr.io/philippe44/airconnectforlinux/amd64andlinux/arm64, making an external Docker repository unnecessary. SupportsAIRCONNECT_MODE=aircast|airupnp|both.docker-compose.yml— ready-to-use compose file withnetwork_mode: host.Key implementation note
The cross-compiler concern from #579 turns out to be manageable for the AirConnect source itself: all library submodules (
libraop,libpupnp,libcodecs,libmdns,libopenssl, etc.) already ship prebuilt.astatic archives under theirtargets/directories, so CI compiles just the AirConnect C source (~5,800 lines) using standardaptcross-compiler packages. The CFLAGS per target (e.g.-march=mips32,-mcpu=v7) are taken directly frombuild.sh.Test plan
docker build -f docker/Dockerfile .locally (requiresgit submodule update --init --recursivefirst)docker compose upand confirm both services start🤖 Generated with Claude Code