Skip to content

gcc fatal errors when using act #5903

@thirtytwobits

Description

@thirtytwobits

Bug report info

act version:            0.2.80
GOOS:                   darwin
GOARCH:                 arm64
NumCPU:                 16
Docker host:            DOCKER_HOST environment variable is not set
Sockets found:
	/var/run/docker.sock
	$HOME/.docker/run/docker.sock
Config files:
	/Users/thirtytwobits/Library/Application Support/act/actrc:
		-P ubuntu-latest=catthehacker/ubuntu:full-latest
		-P ubuntu-22.04=catthehacker/ubuntu:full-22.04
		-P ubuntu-20.04=catthehacker/ubuntu:full-20.04
		-P ubuntu-18.04=catthehacker/ubuntu:full-18.04
Build info:
	Go version:            go1.24.5
	Module path:           command-line-arguments
	Main version:
	Main path:
	Main checksum:
	Build settings:
		-buildmode:           exe
		-compiler:            gc
		-ldflags:             -X main.version=0.2.80
		CGO_ENABLED:          1
		CGO_CFLAGS:
		CGO_CPPFLAGS:
		CGO_CXXFLAGS:
		CGO_LDFLAGS:
		GOARCH:               arm64
		GOOS:                 darwin
		GOARM64:              v8.0
Docker Engine:
	Engine version:        28.3.2
	Engine runtime:        runc
	Cgroup version:        2
	Cgroup driver:         cgroupfs
	Storage driver:        overlayfs
	Registry URI:          https://index.docker.io/v1/
	OS:                    Docker Desktop
	OS type:               linux
	OS version:
	OS arch:               aarch64
	OS kernel:             6.10.14-linuxkit
	OS CPU:                16
	OS memory:             32750 MB
	Security options:
		name=seccomp,profile=builtin
		name=cgroupns

Command used with act

act -v -j verification-arm64 release
act -v -j verification-amd64 release
act -v -j verification-arm64 release --container-architecture linux/amd64
act -v -j verification-amd64 release --container-architecture linux/amd64
act -v -j verification-arm64 release --container-architecture linux/arm64
act -v -j verification-amd64 release --container-architecture linux/arm64

Describe issue

I'm trying to use act to run our workflows which make use of build containers our project manages. The project is CETL (part of open cyphal) and the build containers are defined in our docker_toolchains repository.

On my M3 Max laptop I can manually run our build containers and build everything just fine. Using the exact same repository, Docker desktop instance, and everything; when I try to use act gcc crashes inexplicably?

| FAILED: suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o
| /usr/bin/g++ -DCETL_ENABLE_DEBUG_ASSERT=0 -DCETL_VERSION=\"0.0.0\" -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -DCMAKE_INTDIR=\"Release\" -I/Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/include -I/Users/thirtytwobits/workspace/github/thirtytwobits/CETL/include -I/Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/o1heap/o1heap -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googletest/include -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googletest -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googlemock/include -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googlemock -O3 -DNDEBUG -std=c++17 -pedantic -Wall -Wextra -Werror -Wfloat-equal -Wconversion -Wunused-parameter -Wunused-variable -Wunused-value -Wcast-align -Wmissing-declarations -Wmissing-field-initializers -Wdouble-promotion -Wswitch-enum -Wtype-limits -Wno-error=array-bounds -O3 -fno-delete-null-pointer-checks -Wsign-conversion -Wsign-promo -Wold-style-cast -Wzero-as-null-pointer-constant -Wnon-virtual-dtor -Woverloaded-virtual -MD -MT suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o -MF suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o.d -o suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o -c /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/suites/unittest/test_pf17_variant_ctor_3.cpp
| g++: fatal error: Killed signal terminated program cc1plus
| compilation terminated.
[7/179] Building CXX object suites/unittest/CMakeFiles/test_pf17_variant_assignment_2__googletest_objlib.dir/Release/test_pf17_variant_assignment_2.cpp.o

The only way this could happen is if act wasn't using the containers we specify in our action.yaml. For example:

    runs-on: ubuntu-latest
    container: ghcr.io/opencyphal/toolshed:ts24.4.3

Link to GitHub repository

No response

Workflow content

name: "CETLVaSt"

on:
  push: # Further filtering is done in the jobs.
  pull_request:
    branches:
      - main
      - "issue/*"
  release:
    types: [published]
  workflow_dispatch:

jobs:
  cache-warmup:
    if: >
      github.event_name == 'release' ||
      github.event_name == 'workflow_dispatch' ||
      contains(github.event.head_commit.message, '#verification') ||
      contains(github.event.head_commit.message, '#docs') ||
      contains(github.ref, '/main') ||
      contains(github.ref, '/issue/') ||
      (github.event_name == 'pull_request')
    runs-on: ubuntu-latest
    container: ghcr.io/opencyphal/toolshed:ts24.4.3
    steps:
      - uses: actions/checkout@v4
      - name: Cache ext modules
        id: cetlvast-ext
        uses: actions/cache@v4
        with:
          path: cetlvast/build_external
          key: build-external-${{ hashFiles('**/cetlvast/cmake/modules/ExternalDependencies*.cmake.in') }}-${{ hashFiles('**/cetlvast/cmake/modules/patches/*.patch') }}
      - name: simple-build-online
        working-directory: cetlvast
        if: steps.cetlvast-ext.outputs.cache-hit != 'true'
        run: cmake --workflow --preset manual-simple-workflow-online

  verification-amd64:
    if: >
      github.event_name == 'release' ||
      github.event_name == 'workflow_dispatch' ||
      contains(github.event.head_commit.message, '#verification') ||
      contains(github.ref, '/main') ||
      contains(github.ref, '/issue/') ||
      (github.event_name == 'pull_request')
    runs-on: ubuntu-latest
    container: ghcr.io/opencyphal/toolshed:ts24.4.3
    needs:
      - cache-warmup
    strategy:
      matrix:
        toolchain: ["gcc-native-32", "clang-native"]
        standard: ["cpp-14", "cpp-17", "cpp-20", "cpp-23"]
    steps:
      - uses: actions/checkout@v4
      - name: Cache ext modules
        uses: actions/cache@v4
        with:
          path: cetlvast/build_external
          key: build-external-${{ hashFiles('**/cetlvast/cmake/modules/ExternalDependencies*.cmake.in') }}-${{ hashFiles('**/cetlvast/cmake/modules/patches/*.patch') }}
          fail-on-cache-miss: true
      - name: run tests
        working-directory: cetlvast
        env:
          GTEST_COLOR: yes
        run: >
          cmake --workflow --preset workflow-${{ matrix.toolchain }}-${{ matrix.standard }}-offline
      - name: upload-artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.toolchain }}-${{ matrix.standard }}-amd64
          path: |
            cetlvast/build/compile_commands.json
            cetlvast/build/*/**/coverage.xml
            cetlvast/build/*/**/*-sonarqube.xml
            cetlvast/build/*/**/gcovr_html/*.*
          if-no-files-found: error

  verification-arm64:
    if: >
      github.event_name == 'release' ||
      github.event_name == 'workflow_dispatch' ||
      contains(github.event.head_commit.message, '#verification') ||
      contains(github.ref, '/main') ||
      contains(github.ref, '/issue/') ||
      (github.event_name == 'pull_request')
    runs-on: ubuntu-24.04-arm
    container: ghcr.io/opencyphal/toolshed:ts24.4.3
    needs:
      - cache-warmup
    strategy:
      matrix:
        toolchain: ["gcc-native", "clang-native"]
        standard: ["cpp-14", "cpp-17", "cpp-20"]
    steps:
      - uses: actions/checkout@v4
      - name: Cache ext modules
        uses: actions/cache@v4
        with:
          path: cetlvast/build_external
          key: build-external-${{ hashFiles('**/cetlvast/cmake/modules/ExternalDependencies*.cmake.in') }}-${{ hashFiles('**/cetlvast/cmake/modules/patches/*.patch') }}
          fail-on-cache-miss: true
      - name: run tests
        working-directory: cetlvast
        env:
          GTEST_COLOR: yes
        run: >
          cmake --workflow --preset workflow-${{ matrix.toolchain }}-${{ matrix.standard }}-offline
      - name: upload-artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.toolchain }}-${{ matrix.standard }}-arm64
          path: |
            cetlvast/build/compile_commands.json
            cetlvast/build/*/**/coverage.xml
            cetlvast/build/*/**/*-sonarqube.xml
            cetlvast/build/*/**/gcovr_html/*.*
          if-no-files-found: error

  docs:
    if: >
      github.event_name == 'release' ||
      github.event_name == 'workflow_dispatch' ||
      contains(github.event.head_commit.message, '#docs') ||
      contains(github.ref, '/main') ||
      contains(github.ref, '/issue/') ||
      (github.event_name == 'pull_request')
    runs-on: ubuntu-latest
    container: ghcr.io/opencyphal/toolshed:ts24.4.3
    needs:
      - cache-warmup
    steps:
      - uses: actions/checkout@v4
      - name: Cache ext modules
        uses: actions/cache@v4
        with:
          path: cetlvast/build_external
          key: build-external-${{ hashFiles('**/cetlvast/cmake/modules/ExternalDependencies*.cmake.in') }}-${{ hashFiles('**/cetlvast/cmake/modules/patches/*.patch') }}
          fail-on-cache-miss: true
      - name: doc-gen-configure
        working-directory: cetlvast
        run: cmake --preset configure-gcc-native-cpp-14-offline
      - name: doc-gen-build
        working-directory: cetlvast/build
        run: ninja docs
      - name: Setup Pages
        if: ${{ github.event_name != 'pull_request' }}
        uses: actions/configure-pages@v5
      - name: Upload docs
        if: ${{ github.event_name != 'pull_request' }}
        uses: actions/upload-pages-artifact@v3
        with:
          path: "cetlvast/build/suites/docs/html/"

  sonarqube:
    if: >
      (github.event_name == 'release' && !github.event.release.prerelease) ||
      github.event_name == 'workflow_dispatch' ||
      contains(github.event.head_commit.message, '#sonar') ||
      contains(github.ref, '/main') ||
      contains(github.ref, '/issue/') ||
      (github.event_name == 'pull_request')
    needs:
      - cache-warmup
    runs-on: ubuntu-latest
    container: ghcr.io/opencyphal/toolshed:ts24.4.3
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis by sonarqube.
      - name: Cache ext modules
        uses: actions/cache@v4
        with:
          path: cetlvast/build_external
          key: build-external-${{ hashFiles('**/cetlvast/cmake/modules/ExternalDependencies*.cmake.in') }}-${{ hashFiles('**/cetlvast/cmake/modules/patches/*.patch') }}
          fail-on-cache-miss: true
      - name: Check for SONAR_TOKEN
        if: ${{ env.SONAR_TOKEN == '' && github.event_name == 'pull_request' }}
        run: echo "::notice file=cetlvast.yml,line=188,col=8,endColumn=80,title=No-Sonar::SONAR_TOKEN is not available for pull requests from external repositories."
      - name: Check for SONAR_TOKEN
        if: ${{ env.SONAR_TOKEN == '' && github.event_name != 'pull_request' }}
        run: echo "::error file=cetlvast.yml,line=191,col=8,endColumn=80,title=SONAR_TOKEN-missing::SONAR_TOKEN was empty or not found."
      - name: Run build for sonar-scanner
        if: ${{ env.SONAR_TOKEN != '' }}
        working-directory: cetlvast
        run: cmake --preset configure-gcc-native-cpp-14-offline
      - name: SonarQube Scan
        uses: SonarSource/[email protected]
        with:
          args: >
            -Dsonar.organization=opencyphal
            -Dsonar.projectKey=OpenCyphal_CETL
            -Dsonar.verbose=true
            -Dsonar.cfamily.compile-commands=cetlvast/build/compile_commands.json

  deploy-docs:
    if: >
      (github.event_name == 'release' && !github.event.release.prerelease) ||
      github.event_name == 'workflow_dispatch'
    needs:
      - sonarqube
      - docs
    # Grant GITHUB_TOKEN the permissions required to make a Pages deployment
    permissions:
      contents: read
      pages: write # to deploy to Pages
      id-token: write # to verify the deployment originates from an appropriate source

    # Deploy to the github-pages environment
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}

    # Specify runner + deployment step
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

Relevant log output

| FAILED: suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o
| /usr/bin/g++ -DCETL_ENABLE_DEBUG_ASSERT=0 -DCETL_VERSION=\"0.0.0\" -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -DCMAKE_INTDIR=\"Release\" -I/Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/include -I/Users/thirtytwobits/workspace/github/thirtytwobits/CETL/include -I/Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/o1heap/o1heap -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googletest/include -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googletest -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googlemock/include -isystem /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/build_external/googletest/googlemock -O3 -DNDEBUG -std=c++17 -pedantic -Wall -Wextra -Werror -Wfloat-equal -Wconversion -Wunused-parameter -Wunused-variable -Wunused-value -Wcast-align -Wmissing-declarations -Wmissing-field-initializers -Wdouble-promotion -Wswitch-enum -Wtype-limits -Wno-error=array-bounds -O3 -fno-delete-null-pointer-checks -Wsign-conversion -Wsign-promo -Wold-style-cast -Wzero-as-null-pointer-constant -Wnon-virtual-dtor -Woverloaded-virtual -MD -MT suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o -MF suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o.d -o suites/unittest/CMakeFiles/test_pf17_variant_ctor_3__googletest_objlib.dir/Release/test_pf17_variant_ctor_3.cpp.o -c /Users/thirtytwobits/workspace/github/thirtytwobits/CETL/cetlvast/suites/unittest/test_pf17_variant_ctor_3.cpp
| g++: fatal error: Killed signal terminated program cc1plus
| compilation terminated.
[7/179] Building CXX object suites/unittest/CMakeFiles/test_pf17_variant_assignment_2__googletest_objlib.dir/Release/test_pf17_variant_assignment_2.cpp.o

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions