Skip to content

EC encoding and ECDH raw agreement improvements, X.500 RDN escaping, GF256 AES field ops, and digest AlgorithmIdentifier helpers #320

EC encoding and ECDH raw agreement improvements, X.500 RDN escaping, GF256 AES field ops, and digest AlgorithmIdentifier helpers

EC encoding and ECDH raw agreement improvements, X.500 RDN escaping, GF256 AES field ops, and digest AlgorithmIdentifier helpers #320

Workflow file for this run

name: Make
on:
schedule:
- cron: '0 0 1 * *'
push:
branches:
- "**"
pull_request:
branches:
- master
- main
workflow_dispatch:
inputs:
enabled_targets:
description: >-
Comma-separated list of targets to run (leave empty for the default set).
Valid IDs: linux-x64, linux-arm64, windows-x64, macos-arm64,
macos-x64, linux-arm32, linux-powerpc64-be, freebsd, solaris,
netbsd, dragonflybsd
default: ""
type: string
debug:
description: Verbose install tracing (CI_DEBUG=1 in install-fpc-lazarus.sh)
default: false
type: boolean
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
FPC_VERSION: 3.2.2
LAZARUS_BRANCH: lazarus_4_4
LAZARUS_REPO: https://github.com/fpc/Lazarus.git
MAKE_BUILD_BACKEND: fpc
# make.pas package build scope: 'all' compiles every discovered package (catches
# a package that fails on the target even if unused); 'required' only compiles
# the projects' dependency closure. Override per job below, like MAKE_BUILD_BACKEND.
MAKE_PACKAGE_SCOPE: required
# Space/comma/semicolon-separated conditional defines passed to every compile in
# both backends (fpc: -dNAME, lazbuild: --opt=-dNAME). Override per job as needed.
# Examples:
# single: MAKE_DEFINES: WITH_GTK2_IM
# multiple: MAKE_DEFINES: 'WITH_GTK2_IM DEBUG_LOG USE_CTHREADS'
MAKE_DEFINES: ''
# When true, make.pas builds and runs console benchmarks after the test suite.
# Override per job below, like MAKE_BUILD_BACKEND.
MAKE_RUN_BENCHMARK: false
# Set by the workflow_dispatch "debug" toggle; '1' enables `set -x` tracing in
# install-fpc-lazarus.sh, '0' otherwise. Forwarded into the sandboxed jobs below.
CI_DEBUG: ${{ github.event.inputs.debug == 'true' && '1' || '0' }}
jobs:
setup:
name: Resolve target list
runs-on: ubuntu-latest
outputs:
enabled_targets: ${{ steps.resolve.outputs.enabled_targets }}
target_map: ${{ steps.resolve.outputs.target_map }}
steps:
- uses: actions/checkout@v6
- name: Resolve enabled targets
id: resolve
shell: bash
env:
INPUT_TARGETS: ${{ github.event.inputs.enabled_targets }}
run: bash .github/workflows/ci/resolve-targets.sh
# Native targets are standalone jobs (one per target) rather than a single
# matrix job, so each can carry its own env overrides and so a single-target
# workflow_dispatch cleanly skips the rest. Like the QEMU/VM jobs below, they
# gate via `if: contains(... enabled_targets ...)` and resolve runner/fpc_target
# from target_map. Keep `name:` literal: an if-skipped job renders an
# unevaluated name expression in the UI, so it cannot be sourced from JSON.
linux-x64:
name: "Native: Linux x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-x64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-x64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
linux-arm64:
name: "Native: Linux AArch64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-arm64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
windows-x64:
name: "Native: Windows x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['windows-x64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',windows-x64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['windows-x64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['windows-x64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
macos-arm64:
name: "Native: macOS AArch64 (Apple Silicon)"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['macos-arm64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',macos-arm64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-arm64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-arm64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
macos-x64:
name: "Native: macOS x86_64 (Intel)"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['macos-x64'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',macos-x64,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build
shell: bash
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-x64'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['macos-x64'].fpc_tarball_target }}
run: bash .github/workflows/ci/native-build.sh
linux-arm32:
name: "QEMU: Linux ARMv7"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm32'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-arm32,')
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
env: |
FPC_VERSION: ${{ env.FPC_VERSION }}
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm32'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-arm32'].fpc_tarball_target }}
LAZARUS_BRANCH: ${{ env.LAZARUS_BRANCH }}
LAZARUS_REPO: ${{ env.LAZARUS_REPO }}
MAKE_BUILD_BACKEND: ${{ env.MAKE_BUILD_BACKEND }}
MAKE_PACKAGE_SCOPE: ${{ env.MAKE_PACKAGE_SCOPE }}
MAKE_RUN_BENCHMARK: ${{ env.MAKE_RUN_BENCHMARK }}
CI_DEBUG: ${{ env.CI_DEBUG }}
run: bash .github/workflows/ci/arm32-run.sh
linux-powerpc64-be:
name: "QEMU: Linux PowerPC64 BE"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['linux-powerpc64-be'].runner }}
timeout-minutes: 180
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',linux-powerpc64-be,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Set up QEMU (ppc64 big-endian)
run: bash .github/workflows/ci/ppc64-qemu-setup.sh
- name: Build (PowerPC64 BE via QEMU)
env:
FPC_VERSION: ${{ env.FPC_VERSION }}
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-powerpc64-be'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['linux-powerpc64-be'].fpc_tarball_target }}
MAKE_BUILD_BACKEND: ${{ env.MAKE_BUILD_BACKEND }}
MAKE_PACKAGE_SCOPE: ${{ env.MAKE_PACKAGE_SCOPE }}
MAKE_RUN_BENCHMARK: ${{ env.MAKE_RUN_BENCHMARK }}
run: bash .github/workflows/ci/ppc64-be-build.sh
freebsd:
name: "VM: FreeBSD x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['freebsd'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',freebsd,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (FreeBSD x86_64)
uses: vmactions/freebsd-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['freebsd'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['freebsd'].fpc_tarball_target }}
FREEBSD_INSTALL_MODE: interim
with:
envs: FPC_VERSION FPC_TARGET FPC_TARBALL_TARGET LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FREEBSD_INSTALL_MODE CI_DEBUG
release: "15.0"
usesh: true
prepare: sh .github/workflows/ci/vm-freebsd-prepare.sh
run: bash .github/workflows/ci/vm-freebsd-run.sh
netbsd:
name: "VM: NetBSD x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['netbsd'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',netbsd,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (NetBSD x86_64)
uses: vmactions/netbsd-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['netbsd'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['netbsd'].fpc_tarball_target }}
with:
envs: FPC_VERSION LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FPC_TARGET FPC_TARBALL_TARGET CI_DEBUG
prepare: sh .github/workflows/ci/vm-netbsd-prepare.sh
run: bash .github/workflows/ci/vm-run-shared.sh
dragonflybsd:
name: "VM: DragonFlyBSD x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['dragonflybsd'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',dragonflybsd,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (DragonFlyBSD x86_64)
uses: vmactions/dragonflybsd-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['dragonflybsd'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['dragonflybsd'].fpc_tarball_target }}
LD_LIBRARY_PATH_EXTRA: /usr/local/lib
with:
envs: FPC_VERSION LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FPC_TARGET FPC_TARBALL_TARGET LD_LIBRARY_PATH_EXTRA CI_DEBUG
usesh: true
prepare: sh .github/workflows/ci/vm-dragonfly-prepare.sh
run: bash .github/workflows/ci/vm-run-shared.sh
solaris:
name: "VM: Solaris x86_64"
runs-on: ${{ fromJSON(needs.setup.outputs.target_map)['solaris'].runner }}
timeout-minutes: 120
needs: setup
if: contains(format(',{0},', needs.setup.outputs.enabled_targets), ',solaris,')
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Build (Solaris x86_64)
uses: vmactions/solaris-vm@v1
env:
FPC_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['solaris'].fpc_target }}
FPC_TARBALL_TARGET: ${{ fromJSON(needs.setup.outputs.target_map)['solaris'].fpc_tarball_target }}
with:
envs: FPC_VERSION LAZARUS_BRANCH LAZARUS_REPO MAKE_BUILD_BACKEND MAKE_PACKAGE_SCOPE MAKE_RUN_BENCHMARK FPC_TARGET FPC_TARBALL_TARGET CI_DEBUG
release: "11.4-gcc"
usesh: true
prepare: sh .github/workflows/ci/vm-solaris-prepare.sh
run: bash .github/workflows/ci/vm-run-shared.sh