name: Build IfcOpenShell Linux ARM on: workflow_dispatch: jobs: build_ifcopenshell: runs-on: ubuntu-22.04-arm # Rocky 10 (glibc 2.39) — aqt's official Qt6 ARM binaries are built # against glibc 2.38, which Rocky 9 (glibc 2.34) can't run (moc fails to # load). The legacy arm64v8/rockylinux Docker image stopped at 9; Rocky 10 # is published under the rockylinux/rockylinux namespace. container: image: rockylinux/rockylinux:10 # The community rockylinux image omits PATH from its config (the old # Docker Official arm64v8/rockylinux set it), so GitHub Actions `run:` # steps fail with `exec: "sh": not found` — docker exec has no /usr/bin # to resolve the shell. Restore a standard PATH; GITHUB_PATH prepends # (uv, cargo) are still layered on top by the runner. env: PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin steps: - name: Set up uv uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7.6.0 - name: Install Python # Installs latest Python version so it's preferred by uv over Rocky's system Python. run: uv python install - name: Install Dependencies run: | dnf update -y dnf install -y epel-release # --enablerepo=crb: libstdc++-static (libsupc++.a, needed by the # bundled FLTK link) lives in Rocky's CodeReady Builder repo, which # is disabled by default. dnf install -y --enablerepo=crb gcc gcc-c++ git autoconf automake bison make zip cmake \ bzip2 patch mesa-libGL-devel libffi-devel fontconfig-devel \ sqlite-devel bzip2-devel zlib-devel openssl-devel xz-devel \ readline-devel ncurses-devel libffi-devel libuuid-devel git-lfs \ findutils xz byacc patchelf libxkbcommon-devel \ dbus-devel \ libXext-devel libXinerama-devel libXcursor-devel libXrender-devel \ libXfixes-devel libXft-devel pango-devel cairo-devel libstdc++-static git config --global --add safe.directory '*' - name: Install Rust # The bonsaiviewer-autodesk connector is a Rust crate; the "Package # .zip archives" step below runs `cargo build --release` via # packaging/build.py. Match the dedicated connector workflow's stable # toolchain (dtolnay/rust-toolchain@stable). run: | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain stable echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" - name: Install aws cli run: | curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip" unzip awscliv2.zip ./aws/install rm -rf awscliv2.zip aws aws --version - name: Checkout Repository uses: actions/checkout@v7 with: submodules: recursive - name: Checkout Build Repository uses: actions/checkout@v7 with: repository: IfcOpenShell/build-outputs path: ./build ref: rockylinux9-arm64 lfs: true token: ${{ secrets.BUILD_REPO_TOKEN }} - name: Unpack Dependencies run: | cd build uv run ../nix/cache_dependencies.py unpack - name: ccache uses: hendrikmuhs/ccache-action@v1.2.23 with: key: ubuntu-22.04-${{ runner.arch }}-rockylinux10 - name: Run Build Script shell: bash run: | set -o pipefail CXXFLAGS="-O3" CFLAGS="-O3" ADD_COMMIT_SHA=1 BUILD_CFG=Release BUILD_BONSAIVIEWER=ON \ uv run --with aqtinstall ./nix/build-all.py \ -v --diskcleanup --ifcopenshell-shared 2>&1 \ | tee build.log - name: Upload Build Logs if: always() uses: actions/upload-artifact@v7 with: name: build-logs-rocky-arm64 path: | build.log build/*/*/logs/*.log retention-days: 30 - name: Pack Dependencies run: | cd build uv run ../nix/cache_dependencies.py pack - name: Commit and Push Changes to Build Repository run: | cd build git config user.name "IfcOpenBot" git config user.email "ifcopenbot@ifcopenshell.org" git add "$(find . -maxdepth 4 -name install)/*.tar.gz" git commit -m "Update build artifacts [skip ci]" || echo "No changes to commit" git push || true - name: Package .zip archives shell: bash run: | uv run nix/package-zip-archives.py linuxarm64 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v6 with: aws-access-key-id: ${{ secrets.AWS_UPLOAD_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_UPLOAD_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Upload .zip archives to S3 run: | aws s3 cp ~/output s3://ifcopenshell-builds/ --recursive