update ci make #46
Workflow file for this run
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
| name: Make | |
| on: | |
| schedule: | |
| - cron: '0 0 1 * *' | |
| push: | |
| branches: | |
| - "**" | |
| pull_request: | |
| branches: | |
| - master | |
| - main | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| # ═══════════════════════════════════════════════════════════════════════ | |
| # Shared configuration | |
| # ═══════════════════════════════════════════════════════════════════════ | |
| env: | |
| LAZARUS_BRANCH: lazarus_4_4 | |
| LAZARUS_REPO: https://github.com/fpc/Lazarus.git | |
| # ═══════════════════════════════════════════════════════════════════════ | |
| # Jobs | |
| # ═══════════════════════════════════════════════════════════════════════ | |
| jobs: | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Tier 1 — Native GitHub-hosted runners (Linux, macOS, Windows) | |
| # ───────────────────────────────────────────────────────────────────── | |
| native: | |
| name: ${{ matrix.name }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 120 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runner: ubuntu-latest | |
| name: Linux x86_64 | |
| - runner: ubuntu-24.04-arm | |
| name: Linux AArch64 | |
| - runner: windows-latest | |
| name: Windows x86_64 | |
| - runner: macos-latest | |
| name: macOS AArch64 (Apple Silicon) | |
| - runner: macos-15-intel | |
| name: macOS x86_64 (Intel) | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| # ── Linux ────────────────────────────────────────────────────── | |
| - name: Build (Linux) | |
| if: runner.os == 'Linux' | |
| shell: bash | |
| run: | | |
| set -xeuo pipefail | |
| sudo bash -c 'apt-get update; apt-get install -y lazarus' >/dev/null | |
| openssl version | |
| fpc -iV | |
| instantfpc .github/workflows/make.pas | |
| # ── macOS ────────────────────────────────────────────────────── | |
| - name: Build (macOS) | |
| if: runner.os == 'macOS' | |
| shell: bash | |
| run: | | |
| set -xeuo pipefail | |
| LAZARUS_DIR="/tmp/lazarus-src" | |
| brew install fpc | |
| # FPC 3.2.2 hardcodes libssl.1.1 but macOS runners ship | |
| # OpenSSL 3 via Homebrew (keg-only). Symlink so FPC can find | |
| # the libraries. This hack can be removed once we move to | |
| # FPC 3.2.4+ which natively includes '.3' in DLLVersions. | |
| OSSL_LIB="$(brew --prefix openssl@3)/lib" | |
| sudo mkdir -p /usr/local/lib | |
| sudo ln -sf "$OSSL_LIB/libssl.3.dylib" /usr/local/lib/libssl.1.1.dylib | |
| sudo ln -sf "$OSSL_LIB/libcrypto.3.dylib" /usr/local/lib/libcrypto.1.1.dylib | |
| git clone --depth 1 --branch "$LAZARUS_BRANCH" \ | |
| "$LAZARUS_REPO" "$LAZARUS_DIR" | |
| make -C "$LAZARUS_DIR" lazbuild | |
| mkdir -p "$HOME/.lazarus" | |
| cat > "$HOME/.lazarus/environmentoptions.xml" <<EOF | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <CONFIG> | |
| <EnvironmentOptions> | |
| <LazarusDirectory Value="$LAZARUS_DIR"/> | |
| <CompilerFilename Value="$(which fpc)"/> | |
| </EnvironmentOptions> | |
| </CONFIG> | |
| EOF | |
| export PATH="$LAZARUS_DIR:$PATH" | |
| "$(brew --prefix openssl@3)/bin/openssl" version | |
| fpc -iV | |
| lazbuild --version | |
| instantfpc .github/workflows/make.pas | |
| # ── Windows ──────────────────────────────────────────────────── | |
| - name: Build (Windows) | |
| if: runner.os == 'Windows' | |
| shell: powershell | |
| run: | | |
| $ErrorActionPreference = 'Stop' | |
| Set-PSDebug -Strict | |
| Write-Host "Installing Lazarus via Chocolatey..." | |
| choco install lazarus -y --no-progress | |
| $fpcDir = Get-ChildItem 'C:\Lazarus\fpc' -Directory | Select-Object -First 1 | |
| $env:Path += ";C:\Lazarus;$($fpcDir.FullName)\bin\x86_64-win64" | |
| Write-Host "OpenSSL version:" | |
| openssl version | |
| Write-Host "FPC version:" | |
| fpc -iV | |
| Write-Host "Building make.pas..." | |
| instantfpc .github/workflows/make.pas | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Tier 2 — Linux ARM32 via QEMU user-mode emulation | |
| # ───────────────────────────────────────────────────────────────────── | |
| linux-arm32: | |
| name: Linux ARMv7 (QEMU) | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 120 | |
| env: | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Build (ARMv7 via QEMU user-mode) | |
| uses: uraimo/run-on-arch-action@v3 | |
| with: | |
| arch: armv7 | |
| distro: ubuntu24.04 | |
| githubToken: ${{ github.token }} | |
| install: | | |
| apt-get update | |
| apt-get install -y lazarus openssl wget ca-certificates | |
| # FPC 3.2.2 hardcodes libssl.1.1 but Ubuntu 24.04 ships | |
| # OpenSSL 3.x only. Symlink so FPC can find the libraries. | |
| # This hack can be removed once we move to FPC 3.2.4+ which | |
| # natively includes '.3' in DLLVersions. | |
| ln -sf /usr/lib/arm-linux-gnueabihf/libssl.so.3 \ | |
| /usr/lib/arm-linux-gnueabihf/libssl.so.1.1 | |
| ln -sf /usr/lib/arm-linux-gnueabihf/libcrypto.so.3 \ | |
| /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.1 | |
| run: | | |
| set -xeuo pipefail | |
| openssl version | |
| fpc -iV | |
| instantfpc .github/workflows/make.pas | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Tier 3 — BSD family via vmactions QEMU system VMs | |
| # | |
| # All BSD jobs: build lazbuild from source (Lazarus packages are | |
| # unreliable across BSDs). GNU make (gmake) required on all BSDs. | |
| # | |
| # Not supported (removed): | |
| # - FreeBSD aarch64: fpc-devel exists but is experimental. | |
| # - OpenBSD: pre-built FPC binary links against older libc; | |
| # incompatible with current OpenBSD. No usable package either. | |
| # - NetBSD aarch64: no FPC package available. | |
| # | |
| # Disabled (commented out below): | |
| # - NetBSD x86_64: package server intermittently times out. | |
| # - DragonFlyBSD x86_64: FPC 3.2.x TLS broken (see comment below). | |
| # ───────────────────────────────────────────────────────────────────── | |
| freebsd: | |
| name: FreeBSD x86_64 | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 120 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Build (FreeBSD x86_64) | |
| uses: vmactions/freebsd-vm@v1 | |
| with: | |
| envs: LAZARUS_BRANCH LAZARUS_REPO | |
| release: "15.0" | |
| usesh: true | |
| prepare: | | |
| pkg install -y fpc git wget gmake | |
| LAZARUS_DIR="/tmp/lazarus-src" | |
| git clone --depth 1 --branch "$LAZARUS_BRANCH" \ | |
| "$LAZARUS_REPO" "$LAZARUS_DIR" | |
| gmake -C "$LAZARUS_DIR" lazbuild | |
| mkdir -p "$HOME/.lazarus" | |
| cat > "$HOME/.lazarus/environmentoptions.xml" <<EOF | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <CONFIG> | |
| <EnvironmentOptions> | |
| <LazarusDirectory Value="$LAZARUS_DIR"/> | |
| <CompilerFilename Value="$(which fpc)"/> | |
| </EnvironmentOptions> | |
| </CONFIG> | |
| EOF | |
| export PATH="$LAZARUS_DIR:$PATH" | |
| lazbuild --version | |
| run: | | |
| set -xeuo pipefail | |
| export PATH="/tmp/lazarus-src:$PATH" | |
| openssl version || true | |
| fpc -iV | |
| lazbuild --version | |
| instantfpc .github/workflows/make.pas | |
| # netbsd: | |
| # name: NetBSD x86_64 | |
| # runs-on: ubuntu-latest | |
| # timeout-minutes: 120 | |
| # # Disabled: NetBSD package server (cdn.NetBSD.org) intermittently | |
| # # times out, causing CI failures. Re-enable when server is stable. | |
| # # | |
| # # pkgin is not pre-installed in the vmactions NetBSD image, so we | |
| # # use pkg_add directly. The VM ships with slightly older base | |
| # # packages (e.g. pcre2-10.46) that conflict with the latest repo | |
| # # (which has git requiring pcre2>=10.47). We force-replace pcre2 | |
| # # first, then install everything else cleanly. | |
| # steps: | |
| # - name: Checkout | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # submodules: true | |
| # | |
| # - name: Build (NetBSD x86_64) | |
| # uses: vmactions/netbsd-vm@v1 | |
| # with: | |
| # envs: LAZARUS_BRANCH LAZARUS_REPO | |
| # prepare: | | |
| # export PKG_PATH="https://cdn.NetBSD.org/pub/pkgsrc/packages/NetBSD/$(uname -p)/$(uname -r | cut -d_ -f1)/All" | |
| # | |
| # # Force-update pcre2 to resolve version conflict with git | |
| # pkg_add -uu pcre2 || true | |
| # pkg_add fpc git wget gmake | |
| # | |
| # # NetBSD's FPC package may not generate fpc.cfg properly. | |
| # # Ensure fpc.cfg exists and points to the correct unit paths. | |
| # FPC_VER=$(fpc -iV) | |
| # FPC_CFG="/usr/pkg/etc/fpc.cfg" | |
| # if [ ! -f "$FPC_CFG" ] || ! grep -q "units" "$FPC_CFG"; then | |
| # /usr/pkg/lib/fpc/${FPC_VER}/samplecfg \ | |
| # /usr/pkg/lib/fpc/${FPC_VER} /usr/pkg/etc | |
| # fi | |
| # | |
| # LAZARUS_DIR="/tmp/lazarus-src" | |
| # git clone --depth 1 --branch "$LAZARUS_BRANCH" \ | |
| # "$LAZARUS_REPO" "$LAZARUS_DIR" | |
| # gmake -C "$LAZARUS_DIR" lazbuild | |
| # | |
| # mkdir -p "$HOME/.lazarus" | |
| # cat > "$HOME/.lazarus/environmentoptions.xml" <<EOF | |
| # <?xml version="1.0" encoding="UTF-8"?> | |
| # <CONFIG> | |
| # <EnvironmentOptions> | |
| # <LazarusDirectory Value="$LAZARUS_DIR"/> | |
| # <CompilerFilename Value="$(which fpc)"/> | |
| # </EnvironmentOptions> | |
| # </CONFIG> | |
| # EOF | |
| # | |
| # export PATH="$LAZARUS_DIR:/usr/pkg/bin:$PATH" | |
| # lazbuild --version | |
| # run: | | |
| # set -xeuo pipefail | |
| # export PATH="/tmp/lazarus-src:/usr/pkg/bin:$PATH" | |
| # openssl version || true | |
| # fpc -iV | |
| # lazbuild --version | |
| # instantfpc .github/workflows/make.pas | |
| # dragonflybsd: | |
| # name: DragonFlyBSD x86_64 | |
| # runs-on: ubuntu-latest | |
| # timeout-minutes: 120 | |
| # # Disabled: FPC 3.2.x cannot establish TLS connections on | |
| # # DragonFlyBSD — base LibreSSL is ABI-incompatible and DPorts | |
| # # OpenSSL is 3.x which FPC 3.2.x doesn't support. FPC's | |
| # # pure-Pascal DNS resolver is also broken (same as mono/mono#8168). | |
| # # | |
| # # FPC 3.2.4+ fixes OpenSSL 3.x loading (adds '.3' to DLLVersions) | |
| # # but will NOT fix the DNS resolver bug. The /etc/hosts workaround | |
| # # and LD_LIBRARY_PATH below will still be needed. | |
| # # | |
| # # Lazarus has no DragonFlyBSD lazconf.inc, but DragonFlyBSD is a | |
| # # FreeBSD derivative so the FreeBSD include works as-is. We patch | |
| # # it in after cloning the Lazarus source. | |
| # steps: | |
| # - name: Checkout | |
| # uses: actions/checkout@v6 | |
| # with: | |
| # submodules: true | |
| # | |
| # - name: Build (DragonFlyBSD x86_64) | |
| # uses: vmactions/dragonflybsd-vm@v1 | |
| # with: | |
| # envs: LAZARUS_BRANCH LAZARUS_REPO | |
| # usesh: true | |
| # prepare: | | |
| # pkg install -y fpc git wget gmake openssl | |
| # | |
| # # FPC's pure-Pascal DNS resolver (netdb unit) is broken on | |
| # # DragonFlyBSD — it fails to resolve hostnames even though | |
| # # system tools (host, drill, wget, git) work fine. This is | |
| # # the same class of bug as mono/mono#8168. | |
| # # | |
| # # Workaround: resolve dependency hostnames via system DNS | |
| # # and add them to /etc/hosts. FPC's netdb checks /etc/hosts | |
| # # first (via gethostbyname), bypassing the broken resolver. | |
| # for h in github.com packages.lazarus-ide.org; do | |
| # ip=$(drill "$h" 2>/dev/null | awk '/^'"$h"'/{print $5; exit}') | |
| # if [ -n "$ip" ]; then | |
| # echo "$ip $h" >> /etc/hosts | |
| # fi | |
| # done | |
| # | |
| # # DragonFlyBSD base ships LibreSSL in /usr/lib. Real OpenSSL | |
| # # 3.x from DPorts installs to /usr/local/lib. FPC 3.2.4+ | |
| # # adds '.3' to DLLVersions — once upgraded, remove these | |
| # # symlinks but keep LD_LIBRARY_PATH in the run step. | |
| # ln -sf libssl.so.3 /usr/local/lib/libssl.so.1.1 | |
| # ln -sf libcrypto.so.3 /usr/local/lib/libcrypto.so.1.1 | |
| # | |
| # LAZARUS_DIR="/tmp/lazarus-src" | |
| # git clone --depth 1 --branch "$LAZARUS_BRANCH" \ | |
| # "$LAZARUS_REPO" "$LAZARUS_DIR" | |
| # | |
| # # Lazarus is missing include/dragonfly/lazconf.inc. | |
| # # DragonFlyBSD is a FreeBSD derivative, so the FreeBSD | |
| # # version works as-is. | |
| # mkdir -p "$LAZARUS_DIR/ide/packages/ideconfig/include/dragonfly" | |
| # cp "$LAZARUS_DIR/ide/packages/ideconfig/include/freebsd/lazconf.inc" \ | |
| # "$LAZARUS_DIR/ide/packages/ideconfig/include/dragonfly/lazconf.inc" | |
| # | |
| # gmake -C "$LAZARUS_DIR" lazbuild | |
| # | |
| # mkdir -p "$HOME/.lazarus" | |
| # cat > "$HOME/.lazarus/environmentoptions.xml" <<EOF | |
| # <?xml version="1.0" encoding="UTF-8"?> | |
| # <CONFIG> | |
| # <EnvironmentOptions> | |
| # <LazarusDirectory Value="$LAZARUS_DIR"/> | |
| # <CompilerFilename Value="$(which fpc)"/> | |
| # </EnvironmentOptions> | |
| # </CONFIG> | |
| # EOF | |
| # | |
| # export PATH="$LAZARUS_DIR:$PATH" | |
| # lazbuild --version | |
| # run: | | |
| # set -xeuo pipefail | |
| # export PATH="/tmp/lazarus-src:$PATH" | |
| # export LD_LIBRARY_PATH="/usr/local/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" | |
| # /usr/local/bin/openssl version || true | |
| # fpc -iV | |
| # lazbuild --version | |
| # instantfpc .github/workflows/make.pas | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Tier 4 — Solaris via vmactions QEMU system VM | |
| # | |
| # Solaris uses pkgutil (OpenCSW) for community packages which install | |
| # to /opt/csw/bin. FPC is installed from the official SourceForge | |
| # tarball. FPC's install.sh uses bash syntax so must be run with bash. | |
| # ───────────────────────────────────────────────────────────────────── | |
| solaris: | |
| name: Solaris x86_64 | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 120 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: true | |
| - name: Build (Solaris x86_64) | |
| uses: vmactions/solaris-vm@v1 | |
| with: | |
| envs: LAZARUS_BRANCH LAZARUS_REPO | |
| release: "11.4-gcc" | |
| usesh: true | |
| prepare: | | |
| # CSW packages install to /opt/csw — must be in PATH | |
| # before any CSW-installed tool can be used. | |
| export PATH="/opt/csw/bin:/usr/local/bin:$PATH" | |
| pkgutil -y -i bash wget gmake git | |
| # Install FPC from the official SourceForge tarball. | |
| # FPC's install.sh uses bash syntax (subshell expressions) | |
| # which is incompatible with Solaris /bin/sh. | |
| FPC_VERSION="3.2.2" | |
| FPC_TARBALL="fpc-${FPC_VERSION}.x86_64-solaris.tar" | |
| wget -q "https://sourceforge.net/projects/freepascal/files/Solaris/${FPC_VERSION}/${FPC_TARBALL}/download" \ | |
| -O "/tmp/${FPC_TARBALL}" | |
| cd /tmp && tar xf "${FPC_TARBALL}" | |
| cd "fpc-${FPC_VERSION}.x86_64-solaris" | |
| echo -e "/usr/local\nY\n\nY\n" | bash install.sh | |
| export PATH="/usr/local/bin:$PATH" | |
| # Build lazbuild from source | |
| LAZARUS_DIR="/tmp/lazarus-src" | |
| git clone --depth 1 --branch "$LAZARUS_BRANCH" \ | |
| "$LAZARUS_REPO" "$LAZARUS_DIR" | |
| gmake -C "$LAZARUS_DIR" lazbuild | |
| mkdir -p "$HOME/.lazarus" | |
| cat > "$HOME/.lazarus/environmentoptions.xml" <<EOF | |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <CONFIG> | |
| <EnvironmentOptions> | |
| <LazarusDirectory Value="$LAZARUS_DIR"/> | |
| <CompilerFilename Value="$(which fpc)"/> | |
| </EnvironmentOptions> | |
| </CONFIG> | |
| EOF | |
| export PATH="$LAZARUS_DIR:$PATH" | |
| fpc -iV | |
| lazbuild --version | |
| run: | | |
| set -xeuo pipefail | |
| export PATH="/tmp/lazarus-src:/usr/local/bin:/opt/csw/bin:$PATH" | |
| openssl version || true | |
| fpc -iV | |
| lazbuild --version | |
| instantfpc .github/workflows/make.pas |