Skip to content

Add support for Linux arm64 binaries #10

Add support for Linux arm64 binaries

Add support for Linux arm64 binaries #10

Workflow file for this run

name: Build binaries for platforms under QEMU
on:
push:
tags:
- "v*"
branches:
- main
workflow_dispatch:
pull_request:
permissions:
contents: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-cross:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- { name: "Linux-aarch64", target: aarch64-linux, os: ubuntu-20.04 }
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Check for release
id: is-release
shell: bash
run: |
unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT
- uses: uraimo/run-on-arch-action@v2
name: Build binary under QEMU
id: build
with:
arch: aarch64
distro: ubuntu22.04
# Not required, but speeds up builds by storing container images in
# a GitHub package registry.
githubToken: ${{ github.token }}
# workaround for $GITHUB_OUTPUT not available in run-on-arch:
# https://github.com/uraimo/run-on-arch-action/issues/52
dockerRunArgs: |
--volume /home/runner/work/_temp:/home/runner/work/_temp
run: |
apt update
apt install python3-pip -y
pip install .
# aliens: requires no source
ALIENS_NAME="aliens-${{ matrix.target }}.bin"
ALIENS_PATH=${PWD}/${ALIENS_NAME}
packaged $ALIENS_NAME 'pip install pygame' 'python -m pygame.examples.aliens'
# # textual: requires no source
# TEXTUAL_NAME="textual-${{ matrix.target }}.bin"
# TEXTUAL_PATH=${PWD}/${TEXTUAL_NAME}
# packaged $TEXTUAL_NAME 'pip install pygame' 'python -m textual'
# # IPython: requires no source
# IPYTHON_NAME="ipython-${{ matrix.target }}.bin"
# IPYTHON_PATH=${PWD}/${IPYTHON_NAME}
# packaged $IPYTHON_NAME 'pip install ipython' 'ipython'
# # ./examples/mandelbrot
# MANDELBROT_NAME="mandelbrot-${{ matrix.target }}.bin"
# MANDELBROT_PATH=${PWD}/${MANDELBROT_NAME}
# packaged $MANDELBROT_NAME 'pip install -r requirements.txt' 'python mandelbrot.py' ./example/mandelbrot
# # ./examples/minesweeper
# MINESWEEPER_NAME="minesweeper-${{ matrix.target }}.bin"
# MINESWEEPER_PATH=${PWD}/${MINESWEEPER_NAME}
# packaged ./example/minesweeper
# mv ./minesweeper.bin $MINESWEEPER_NAME
# Setup output paths for upload
GITHUB_OUTPUT=""
echo "ALIENS_NAME=${ALIENS_NAME}" >> $GITHUB_OUTPUT
echo "ALIENS_PATH=${ALIENS_PATH}" >> $GITHUB_OUTPUT
# echo "TEXTUAL_NAME=${TEXTUAL_NAME}" >> $GITHUB_OUTPUT
# echo "TEXTUAL_PATH=${TEXTUAL_PATH}" >> $GITHUB_OUTPUT
# echo "IPYTHON_NAME=${IPYTHON_NAME}" >> $GITHUB_OUTPUT
# echo "IPYTHON_PATH=${IPYTHON_PATH}" >> $GITHUB_OUTPUT
# echo "MANDELBROT_NAME=${MANDELBROT_NAME}" >> $GITHUB_OUTPUT
# echo "MANDELBROT_PATH=${MANDELBROT_PATH}" >> $GITHUB_OUTPUT
# echo "MINESWEEPER_NAME=${MINESWEEPER_NAME}" >> $GITHUB_OUTPUT
# echo "MINESWEEPER_PATH=${MINESWEEPER_PATH}" >> $GITHUB_OUTPUT
- run: echo github output is $GITHUB_OUTPUT
- name: Upload aliens
uses: actions/upload-artifact@v4
with:
name: ${{ steps.build.outputs.ALIENS_NAME }}
path: ${{ steps.build.outputs.ALIENS_PATH }}
# - name: Upload textual
# uses: actions/upload-artifact@v4
# with:
# name: ${{ steps.build.outputs.TEXTUAL_NAME }}
# path: ${{ steps.build.outputs.TEXTUAL_PATH }}
# - name: Upload IPython
# uses: actions/upload-artifact@v4
# with:
# name: ${{ steps.build.outputs.IPYTHON_NAME }}
# path: ${{ steps.build.outputs.IPYTHON_PATH }}
# - name: Upload mandelbrot
# uses: actions/upload-artifact@v4
# with:
# name: ${{ steps.build.outputs.MANDELBROT_NAME }}
# path: ${{ steps.build.outputs.MANDELBROT_PATH }}
# - name: Upload minesweeper
# uses: actions/upload-artifact@v4
# with:
# name: ${{ steps.build.outputs.MINESWEEPER_NAME }}
# path: ${{ steps.build.outputs.MINESWEEPER_PATH }}
- name: Publish packages
uses: softprops/action-gh-release@v1
if: steps.is-release.outputs.IS_RELEASE
with:
draft: true
files: |
${{ steps.build.outputs.ALIENS_PATH }}
${{ steps.build.outputs.TEXTUAL_PATH }}
${{ steps.build.outputs.IPYTHON_PATH }}
${{ steps.build.outputs.MANDELBROT_PATH }}
${{ steps.build.outputs.MINESWEEPER_PATH }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}