implement building for ARM platforms

This commit is contained in:
2026-05-12 16:48:41 +03:30
parent f9e5b65d39
commit 21edc39155
4 changed files with 300 additions and 133 deletions

View File

@@ -1,6 +1,6 @@
# Release Builds
The GitHub Actions workflow in `.github/workflows/release.yml` builds ready-to-use Linux x86_64 dynamic module packages.
The GitHub Actions workflow in `.github/workflows/release.yml` builds ready-to-use Linux dynamic module packages for x86_64 and ARM targets.
## Manual Release Only
@@ -9,8 +9,9 @@ The workflow runs only through GitHub Actions `workflow_dispatch`. It does not r
Open the workflow in GitHub Actions and choose:
- `nginx_versions`: space-separated versions, for example `1.24.0 1.26.3 1.28.0`
- `target_arches`: space-separated targets, default `linux-x86_64 linux-arm64 linux-armv7`
- `version_bump`: `patch`, `minor`, or `major`
- `push_image`: whether to push the Docker image to GHCR
- `push_image`: whether to push the multi-platform Docker image to GHCR
The workflow fetches existing `vMAJOR.MINOR.PATCH` tags, computes the next semantic version, creates an annotated tag, pushes it, and publishes the GitHub release.
@@ -27,14 +28,27 @@ no existing tag + patch = v0.0.1
By default, the workflow builds packages for:
- Nginx 1.22.1
- Nginx 1.24.0
- Nginx 1.26.3
- Nginx 1.28.0
- Nginx 1.30.0
## Built CPU Targets
By default, the workflow builds module packages for:
- `linux-x86_64`
- `linux-arm64`
- `linux-armv7`
Aliases such as `amd64`, `arm64`, `aarch64`, `armv7`, and `armhf` are normalized by the workflow.
Each release asset is named like:
```text
ngx_http_monitoring_module-1.0.0-v1.0.0-nginx-1.28.0-linux-x86_64.tar.gz
ngx_http_monitoring_module-v1.0.0-nginx-1.28.0-linux-x86_64.tar.gz
ngx_http_monitoring_module-v1.0.0-nginx-1.28.0-linux-arm64.tar.gz
```
Each package contains:
@@ -55,6 +69,8 @@ ghcr.io/<owner>/<repo>:<tag>
ghcr.io/<owner>/<repo>:latest
```
The image is built with Docker Buildx for the same normalized target platforms requested by `target_arches`.
## Compatibility Warning
Nginx dynamic modules are ABI-sensitive. The release packages are built with `--with-compat` on Ubuntu 22.04 against the Nginx version in the filename. Use the matching Nginx version and a compatible Linux/glibc runtime. Rebuild locally when using a vendor Nginx package with materially different module ABI or hardening options.
Nginx dynamic modules are ABI-sensitive. The release packages are built with `--with-compat` on Ubuntu 22.04 against the Nginx version and CPU architecture in the filename. Use the matching Nginx version, CPU architecture, and a compatible Linux/glibc runtime. Rebuild locally when using a vendor Nginx package with materially different module ABI or hardening options.