Skip to content

Fix memory leak and re-enable immutable-send GC optimization #81

Fix memory leak and re-enable immutable-send GC optimization

Fix memory leak and re-enable immutable-send GC optimization #81

Workflow file for this run

name: ponyc
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- '**'
- '!tools/**'
- '!**/*.md'
- '!**/*.yml'
- '!.dockerfiles/**'
- '!.ci-dockerfiles/**'
- '.github/workflows/pr-ponyc.yml'
concurrency:
group: pr-ponyc-${{ github.ref }}
cancel-in-progress: true
permissions:
packages: read
jobs:
x86_64-linux:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- image: ghcr.io/ponylang/ponyc-ci-x86-64-unknown-linux-ubuntu24.04-builder:20250115
name: x86-64 Linux glibc
debugger: lldb
- image: ghcr.io/ponylang/ponyc-ci-alpine3.23-builder:20260201
name: x86-64 Linux musl
debugger: lldb
name: ${{ matrix.name }}
container:
image: ${{ matrix.image }}
options: --user pony --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Restore Libs Cache
id: restore-libs
uses: actions/cache/restore@v4
with:
path: build/libs
key: libs-${{ matrix.image }}-${{ hashFiles('Makefile', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/llvm/patches/*') }}
- name: Build Libs
if: steps.restore-libs.outputs.cache-hit != 'true'
run: make libs build_flags=-j8
- name: Build Debug Runtime
run: |
make configure arch=x86-64 config=debug
make build config=debug
- name: Test with Debug Runtime
run: make test-ci-core config=debug usedebugger='${{ matrix.debugger }}'
- name: Build Release Runtime
run: |
make configure arch=x86-64 config=release
make build config=release
- name: Test with Release Runtime
run: make test-ci-core config=release usedebugger='${{ matrix.debugger }}'
# Currently, Github actions supplied by GH like checkout and cache do not work
# in musl libc environments on arm64. We can work around this by running
# those actions on the host and then "manually" doing our work that would
# normally be done "in the musl container" by starting the container ourselves
# for various steps by invoking docker directly.
#
# This is not in line with our standard pattern of "just do it all in the
# container" but is required to work around the GitHub actions limitation
# documented above.
arm64-linux:
if: github.event.pull_request.draft == false
runs-on: ubuntu-24.04-arm
strategy:
fail-fast: false
matrix:
include:
- image: ghcr.io/ponylang/ponyc-ci-arm64-unknown-linux-ubuntu24.04-builder:20250510
name: arm64 Linux glibc
- image: ghcr.io/ponylang/ponyc-ci-alpine3.23-builder:20260201
name: arm64 Linux musl
name: ${{ matrix.name }}
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pull Docker image
run: docker pull ${{ matrix.image }}
- name: Restore Libs Cache
id: restore-libs
uses: actions/cache/restore@v4
with:
path: build/libs
key: libs-${{ matrix.image }}-${{ hashFiles('Makefile', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/llvm/patches/*') }}
- name: Build Libs
if: steps.restore-libs.outputs.cache-hit != 'true'
run: |
docker run --rm \
--user pony \
-v ${{ github.workspace }}:/home/pony/project \
-w /home/pony/project \
${{ matrix.image }} \
make libs build_flags=-j8
- name: Build Debug Runtime
run: |
docker run --rm \
--user pony \
-v ${{ github.workspace }}:/home/pony/project \
-w /home/pony/project \
${{ matrix.image }} \
bash -c "make configure arch=armv8-a config=debug && make build config=debug"
- name: Test with Debug Runtime
run: |
docker run --rm \
--user pony \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
-v ${{ github.workspace }}:/home/pony/project \
-w /home/pony/project \
${{ matrix.image }} \
make test-ci-core config=debug
- name: Build Release Runtime
run: |
docker run --rm \
--user pony \
-v ${{ github.workspace }}:/home/pony/project \
-w /home/pony/project \
${{ matrix.image }} \
bash -c "make configure arch=armv8-a config=release && make build config=release"
- name: Test with Release Runtime
run: |
docker run --rm \
--user pony \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
-v ${{ github.workspace }}:/home/pony/project \
-w /home/pony/project \
${{ matrix.image }} \
make test-ci-core config=release
x86_64-macos:
if: github.event.pull_request.draft == false
runs-on: macos-15-intel
name: x86-64 Apple Darwin
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Restore Libs Cache
id: restore-libs
uses: actions/cache/restore@v4
with:
path: build/libs
key: libs-x86-macos-15-intel-${{ hashFiles('Makefile', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/llvm/patches/*') }}
- name: Build Libs
if: steps.restore-libs.outputs.cache-hit != 'true'
run: make libs build_flags=-j8
- name: Build Debug Runtime
run: |
make configure arch=x86-64 config=debug
make build config=debug
- name: Test with Debug Runtime
run: make test-ci-core config=debug test_full_program_timeout=180
- name: Build Release Runtime
run: |
make configure arch=x86-64 config=release
make build config=release
- name: Test with Release Runtime
run: make test-ci-core config=release test_full_program_timeout=180
arm64-macos:
if: github.event.pull_request.draft == false
runs-on: macos-15
name: arm64 Apple Darwin
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Restore Libs Cache
id: restore-libs
uses: actions/cache/restore@v4
with:
path: build/libs
key: libs-arm64-macos-15-${{ hashFiles('Makefile', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/llvm/patches/*') }}
- name: Build Libs
if: steps.restore-libs.outputs.cache-hit != 'true'
run: make libs build_flags=-j8
- name: Build Debug Runtime
run: |
make configure arch=armv8 config=debug
make build config=debug
- name: Test with Debug Runtime
run: make test-ci-core config=debug
- name: Build Release Runtime
run: |
make configure arch=armv8 config=release
make build config=release
- name: Test with Release Runtime
run: make test-ci-core config=release
x86_64-windows:
if: github.event.pull_request.draft == false
runs-on: windows-2025
defaults:
run:
shell: pwsh
name: x86-64 Windows MSVC
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Install Dependencies
run: |
function msys() { C:\msys64\usr\bin\bash.exe @('-lc') + @Args }; msys ' '; msys 'pacman --noconfirm -Syuu'; msys 'pacman --noconfirm -Syuu'; msys 'pacman --noconfirm -S --needed base-devel mingw-w64-x86_64-lldb'; msys 'pacman --noconfirm -Scc'
- name: Restore Libs Cache
id: restore-libs
uses: actions/cache/restore@v4
with:
path: build/libs
key: libs-windows-2025-${{ hashFiles('make.ps1', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/llvm/patches/*') }}
- name: Build Libs
if: steps.restore-libs.outputs.cache-hit != 'true'
run: .\make.ps1 -Command libs
- name: Build Debug Runtime
run: |
.\make.ps1 -Command configure -Config Debug
.\make.ps1 -Command build -Config Debug
- name: Test with Debug Runtime
run: .\make.ps1 -Command test -Config Debug -Uselldb yes
- name: Build Release Runtime
run: |
.\make.ps1 -Command configure -Config Release
.\make.ps1 -Command build -Config Release
- name: Test with Release Runtime
run: .\make.ps1 -Command test -Config Release -Uselldb yes
- name: Build examples
run: .\make.ps1 -Command build-examples
arm64-windows:
if: github.event.pull_request.draft == false
runs-on: windows-11-arm
defaults:
run:
shell: pwsh
name: arm64 Windows MSVC
steps:
- name: Checkout
uses: actions/checkout@v4.1.1
- name: Restore Libs Cache
id: restore-libs
uses: actions/cache/restore@v4
with:
path: build/libs
key: libs-windows-11-arm-${{ hashFiles('make.ps1', 'CMakeLists.txt', 'lib/CMakeLists.txt', 'lib/llvm/patches/*') }}
- name: Build Libs
if: steps.restore-libs.outputs.cache-hit != 'true'
run: .\make.ps1 -Command libs -Arch ARM64
- name: Build Debug Runtime
run: |
.\make.ps1 -Command configure -Config Debug -Arch ARM64
.\make.ps1 -Command build -Config Debug
- name: Test with Debug Runtime
run: .\make.ps1 -Command test -Config Debug
- name: Build Release Runtime
run: |
.\make.ps1 -Command configure -Config Release -Arch ARM64
.\make.ps1 -Command build -Config Release
- name: Test with Release Runtime
run: .\make.ps1 -Command test -Config Release
- name: Build examples
run: .\make.ps1 -Command build-examples