From 69c5864bdbc97326de6cd3ea97c9e8996e81d1f3 Mon Sep 17 00:00:00 2001 From: Hennik Hunsaker Date: Wed, 8 Mar 2023 15:29:25 -0700 Subject: [PATCH] Switch to GitHub Actions to resume builds Travis stopped building images on their .org instance on 15 Jun 2021, leaving the last push to Docker Hub on 19 May 2021. That's a few months out of date, now, which causes pulls to have lots of updates to run on startup. In the interest of getting builds going again, and moving away from Travis, here is a switch to GitHub Actions instead. I also replaced the QEMU setup script with a Docker image designed to do the same thing, mostly so the builds would complete. --- .github/workflows/build-deploy.yml | 66 ++++++++++++++++++++++++++++++ .travis.yml | 29 ------------- README.md | 11 +++-- build | 2 +- create-manifest | 6 +-- prepare-qemu | 18 -------- push | 2 +- 7 files changed, 76 insertions(+), 58 deletions(-) create mode 100644 .github/workflows/build-deploy.yml delete mode 100644 .travis.yml delete mode 100755 prepare-qemu diff --git a/.github/workflows/build-deploy.yml b/.github/workflows/build-deploy.yml new file mode 100644 index 0000000..846052f --- /dev/null +++ b/.github/workflows/build-deploy.yml @@ -0,0 +1,66 @@ +name: Build and Deploy + +on: + push: + branches: + - master + pull_request: + branches: + - master + schedule: + - cron: '0 0 * * 0' # Run weekly on Sunday at midnight + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + arch: + - arm32v7 + - arm64v8 + steps: + - uses: actions/checkout@v2 + - name: Enable Docker experimental mode for image squashing + if: github.actor != 'nektos/act' + run: | + echo '{ "experimental": true }' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + - name: Setup dependencies + run: | + sudo apt-get update && \ + sudo apt-get --yes --no-install-recommends install qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + chmod -R g-w ./ + - name: Build images + run: ./build + env: + BUILD_ARCH: ${{ matrix.arch }} + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} + - name: Deploy images + if: github.event_name != 'pull_request' + run: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" && ./push + env: + BUILD_ARCH: ${{ matrix.arch }} + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + + manifests: + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' + needs: + - build + steps: + - uses: actions/checkout@v2 + - name: Setup dependencies + run: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" + env: + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + - name: Create Manifest + run: ./create-manifest + env: + DOCKER_ORG: ${{ secrets.DOCKER_USERNAME }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 32dddb0..0000000 --- a/.travis.yml +++ /dev/null @@ -1,29 +0,0 @@ -dist: xenial -language: generic -sudo: required -go: - - stable -services: - - docker -env: - - BUILD_ARCH=arm32v7 - - BUILD_ARCH=arm64v8 -install: - - 'echo ''{ "experimental": true }'' | sudo tee /etc/docker/daemon.json' - - sudo systemctl restart docker - - sudo apt-get --yes --no-install-recommends install qemu-user-static -before_script: - - sudo ./prepare-qemu - - chmod -R g-w ./ -script: - - ./build -after_success: - - '[ "$TRAVIS_PULL_REQUEST" == "false" ] && docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" && ./push' - -jobs: - include: - - stage: deploy - name: "Create Manifest" - install: 'mkdir $HOME/.docker/ && echo ''{ "experimental": "enabled" }'' > $HOME/.docker/config.json' - before_script: docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" - script: ./create-manifest diff --git a/README.md b/README.md index cfed3ca..2b0859f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Basic Arch Linux ARM Docker images [![Build Status](https://travis-ci.org/agners/archlinuxarm-docker.svg?branch=master)](https://travis-ci.org/agners/archlinuxarm-docker) +# Basic Arch Linux ARM Docker images [![Build and Deploy](https://github.com/agners/archlinuxarm-docker/actions/workflows/build-deploy.yml/badge.svg)](https://github.com/agners/archlinuxarm-docker/actions/workflows/build-deploy.yml) Docker images for Arch Linux ARM on AArch32 (ARMv7-A) and AArch64 (ARMv8-A). Built using native pacman and Docker multi-stage builds. Builds weekly by Travis CI on publicly visible infrastructure using Qemu emulation. @@ -16,7 +16,7 @@ Instead of using the multi-arch container above, you can also get the architectu | Tag | Update | Type | Description | |:------:|:----------:|:-------:|:-----------------------------------------------------------------------------------| -| latest | **weekly** | minimal | minimal Arch Linux ARM with pacman support | +| latest | **weekly** | minimal | minimal Arch Linux ARM with pacman support | ### Layer structure @@ -43,16 +43,15 @@ docker run -e TZ=Europe/Berlin agners/archlinuxarm ### Prerequisites - Docker with experimental mode on (required for squash) -- sudo or root is neccessary to setup binfmt for Qemu user mode emulation ### Building -- Prepare binfmt use with Qemu user mode using `sudo ./prepare-qemu` -- Run `BUILD_ARCH= ./build` to build +- Prepare binfmt use with Qemu user mode using `docker run --rm --privileged multiarch/qemu-user-static --reset -p yes` +- Run `BUILD_ARCH= DOCKER_ORG= ./build` to build - Use `BUILD_ARCH=arm32v7` for ARMv7 Aarch32 - Use `BUILD_ARCH=arm64v8` for ARMv8 Aarch64 -If you want to push the images, run `./push`. *But be aware you have no push access to the repos! Edit the scripts to push to custom Docker Hub locations!* +If you want to push the images, run `DOCKER_ORG= ./push`. ### Building from scratch diff --git a/build b/build index 0beea81..a110052 100755 --- a/build +++ b/build @@ -1,7 +1,7 @@ #!/bin/bash -ex DOCKER_ARCH=${BUILD_ARCH:-arm32v7} -DOCKER_ORG=agners +DOCKER_ORG=${DOCKER_ORG:-agners} DOCKER_IMAGE=archlinuxarm-${DOCKER_ARCH} TAG_DATE=$(date +'%Y%m%d') diff --git a/create-manifest b/create-manifest index e6e743f..c5c40be 100755 --- a/create-manifest +++ b/create-manifest @@ -1,6 +1,6 @@ #!/bin/bash -ex -DOCKER_ORG=agners +DOCKER_ORG=${DOCKER_ORG:-agners} DOCKER_IMAGE=archlinuxarm TAGS="latest $(date +'%Y%m%d')" @@ -8,8 +8,8 @@ TAGS="latest $(date +'%Y%m%d')" for TAG in $TAGS do docker manifest create --amend $DOCKER_ORG/$DOCKER_IMAGE:$TAG \ - $DOCKER_ORG/$DOCKER_IMAGE-arm32v7:$TAG \ - $DOCKER_ORG/$DOCKER_IMAGE-arm64v8:$TAG + $DOCKER_ORG/$DOCKER_IMAGE-arm32v7:$TAG \ + $DOCKER_ORG/$DOCKER_IMAGE-arm64v8:$TAG docker manifest annotate $DOCKER_ORG/$DOCKER_IMAGE:$TAG \ $DOCKER_ORG/$DOCKER_IMAGE-arm32v7:$TAG \ diff --git a/prepare-qemu b/prepare-qemu deleted file mode 100755 index a57687e..0000000 --- a/prepare-qemu +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -ex - -if [[ $EUID -ne 0 ]]; then - echo "This script must be run as root" - exit 1 -fi - -# Delete currently existing configurations -if [ -f /proc/sys/fs/binfmt_misc/qemu-arm ]; then - echo -1 > /proc/sys/fs/binfmt_misc/qemu-arm -fi -if [ -f /proc/sys/fs/binfmt_misc/qemu-aarch64 ]; then - echo -1 > /proc/sys/fs/binfmt_misc/qemu-aarch64 -fi - -echo ':qemu-arm:M:0:\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:CF' > /proc/sys/fs/binfmt_misc/register - -echo ':qemu-aarch64:M:0:\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:CF' > /proc/sys/fs/binfmt_misc/register diff --git a/push b/push index ae3206c..8df7c00 100755 --- a/push +++ b/push @@ -1,7 +1,7 @@ #!/bin/bash -ex DOCKER_ARCH=${BUILD_ARCH:-arm32v7} -DOCKER_ORG=agners +DOCKER_ORG=${DOCKER_ORG:-agners} DOCKER_IMAGE=archlinuxarm-${DOCKER_ARCH} TAG_DATE=$(date +'%Y%m%d')