summaryrefslogtreecommitdiffstats
path: root/.github/workflows
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2019-11-24 13:35:09 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-11-28 11:12:59 -0800
commit8c641402207dcee2f17de6f18c463a40b6434847 (patch)
tree9bc8bbe2256b3dceea0a9706ebce0beec5e2718e /.github/workflows
parent311eb9a2e3e4959eb53a2a7bcebd46aaa03e8829 (diff)
downloadsubsurface-8c641402207dcee2f17de6f18c463a40b6434847.tar.gz
GitHub Actions: add two stage MXE container build
Based on ideas from Anton - both the basic building of containers in the first place as well as the workaround for the 6h build limit. Because GitHub Actions are limited to 6 hours we split the creation of the MXE container into two steps and push the intermediary container after stage 1 to docker hub. Right now each of the steps takes about 3.5 hours, so hopefully even with changes in the future this will continue to work. This commit also introduces use of docker hub instead of GitHub's own registry (since strangely right now GitHub actions cannot run containers from GitHub's private registry). In order for this to work, we need to have the docker credentials in secrets in GitHub. As a result, only people who can create branches in our repository can easily test changes to the container images. Others can modify the code to use a different docker hub account and provide those secrets in their own GitHub account. Not ideal, but of course we cannot allow every pull request to potentially overwrite docker images in our "official" docker hub account. Suggested-by: Anton Lundin <glance@acc.umu.se> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/mxe-dockerimage-stage1.yml49
-rw-r--r--.github/workflows/mxe-dockerimage-stage2.yml34
2 files changed, 83 insertions, 0 deletions
diff --git a/.github/workflows/mxe-dockerimage-stage1.yml b/.github/workflows/mxe-dockerimage-stage1.yml
new file mode 100644
index 000000000..1452fab38
--- /dev/null
+++ b/.github/workflows/mxe-dockerimage-stage1.yml
@@ -0,0 +1,49 @@
+name: Docker Image CI
+
+on:
+ push:
+ paths:
+ - scripts/docker/mxe-build-container/*
+
+
+jobs:
+ mxe-build-container-stage1:
+ runs-on: ubuntu-latest
+ env:
+ # IMPORTANT: use the second digit to test new versions, each new official build should be n.0 with the first one being 1.0
+ # as you test changes toward a new release, call those 1.1, 1.2, 1.3, etc
+ # VERSION is just that version presented as a string constant
+ #
+ VERSION: ${{ '0.5' }}
+
+ steps:
+ - uses: actions/checkout@v1
+
+ # Because, reasons, we can't really do anything in YAML, so do this crazy shell callout thingy in order to assemble
+ # sane variables to use later in this job - if someone knows an easier way to do this, please let me know!
+ # This abomination below assembles the docker image NAME and appends ".stage1" to the VERSION
+ - name: set env
+ run: |
+ v=${{ env.VERSION }}
+ s=".stage1"
+ echo "::set-env name=NAME::subsurface/mxe-build-container:${v}${s}"
+
+ - name: Build and Publish stage 1 Docker image to Dockerhub
+ uses: elgohr/Publish-Docker-Github-Action@master
+ with:
+ name: ${{ env.NAME }}
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+ dockerfile: 'Dockerfile-stage1'
+ workdir: './scripts/docker/mxe-build-container/'
+
+ - name: Trigger stage 2 to run
+ # this triggers a dispatch event in our own repository - this allows us to work around the
+ # 6h runtime max (as on a two core system the total build time of this container is closer to 7h)
+ # we use the event_type to pass the version that we are building to the second stage
+ run: |
+ curl -XPOST -H 'authorization: token ${{ secrets.ACCESS_TOKEN }}' \
+ -H "Accept: application/vnd.github.everest-preview+json" \
+ -H "Content-Type: application/json" \
+ https://api.github.com/repos/subsurface-divelog/subsurface/dispatches \
+ --data '{"event_type": "${{ env.VERSION }}" }'
diff --git a/.github/workflows/mxe-dockerimage-stage2.yml b/.github/workflows/mxe-dockerimage-stage2.yml
new file mode 100644
index 000000000..531982a70
--- /dev/null
+++ b/.github/workflows/mxe-dockerimage-stage2.yml
@@ -0,0 +1,34 @@
+name: Docker Image CI stage 2
+
+# trigger this second stage via a repository dispaych event
+# the version that we are building is passed in via the event type that is available to us here
+# as github.event.action
+
+on: repository_dispatch
+
+jobs:
+ mxe-build-container-stage2:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+
+ # Grab the version from the event name that we were triggered by and add ".stage1" to find the docker image to start FROM
+ # And create the NAME of the final docker image
+ - name: set env
+ run: |
+ v=${{ github.event.action }}
+ s=".stage1"
+ echo "::set-env name=VERSION::${v}${s}"
+ echo "::set-env name=NAME::subsurface/mxe-build-container:${v}"
+
+ - name: Build and Publish stage 2 Docker image to Dockerhub
+ uses: elgohr/Publish-Docker-Github-Action@master
+ with:
+ name: ${{ env.NAME }}
+ username: ${{ secrets.DOCKER_USERNAME }}
+ password: ${{ secrets.DOCKER_PASSWORD }}
+ dockerfile: 'Dockerfile-stage2'
+ workdir: './scripts/docker/mxe-build-container/'
+ buildargs: VERSION
+