1 changed files with 147 additions and 0 deletions
@ -0,0 +1,147 @@ |
|||||
|
name: Build & deploy ElectrumX |
||||
|
|
||||
|
on: |
||||
|
push: |
||||
|
tags: |
||||
|
- '*' |
||||
|
|
||||
|
jobs: |
||||
|
build: |
||||
|
name: Build ElectrumX |
||||
|
runs-on: ubuntu-18.04 |
||||
|
|
||||
|
# NOTE: qemu v3.1.1 used instead of currently newest v4.1.0, because v4 is **much** slower for aarch64, see: |
||||
|
# https://github.com/meeDamian/docker-berkeleydb/commit/9e87d11314c2522726497f0c6059e61a31298e7f/checks |
||||
|
env: |
||||
|
QEMU_VERSION: v3.1.1 |
||||
|
DOCKER_BUILDKIT: 1 |
||||
|
|
||||
|
strategy: |
||||
|
matrix: |
||||
|
arch: |
||||
|
- arm32v7 |
||||
|
- arm64 |
||||
|
- amd64 |
||||
|
|
||||
|
steps: |
||||
|
- uses: actions/checkout@v1.0.0 |
||||
|
|
||||
|
- name: Setup environment |
||||
|
run: | |
||||
|
VERSION="$(echo "${GITHUB_REF}" | awk -F/ '{print $NF}' | tr -d v)" |
||||
|
echo ::set-env name=VERSION::"${VERSION}" |
||||
|
echo ::set-env name=DIR::"$(echo "${VERSION}" | cut -d. -f-2)" |
||||
|
- name: Register self-compiled qemu |
||||
|
if: matrix.arch != 'amd64' |
||||
|
run: docker run --rm --privileged "meedamian/simple-qemu:${QEMU_VERSION}-${{matrix.arch}}" -p yes |
||||
|
|
||||
|
# Alter `Dockerfile` to reference used architecture/image combos explicitly. Places changed are: |
||||
|
# * all `FROM` statements (ex. `FROM alpine…` -> `FROM arm64v8/alpine…`) |
||||
|
# `sed` `--expression`s change it in the following way: |
||||
|
# Matches all occurrences of `FROM alpine`, and injects arch prefix before `alpine`, ex: `arm64v8/alpine` |
||||
|
- name: Change Dockerfile to use arch-specific base images |
||||
|
if: matrix.arch != 'amd64' |
||||
|
run: | |
||||
|
CPU="${{matrix.arch}}" |
||||
|
if [[ "${CPU}" == "arm64" ]]; then |
||||
|
CPU="arm64v8" |
||||
|
fi |
||||
|
sed -i ${DIR}/Dockerfile \ |
||||
|
-e "s|^FROM alpine|FROM $CPU/alpine|g" |
||||
|
- name: Build ElectrumX |
||||
|
run: > |
||||
|
docker build ${DIR}/ |
||||
|
--build-arg "VERSION=${VERSION}" |
||||
|
--tag electrumx |
||||
|
- name: Print OS info |
||||
|
run: docker run --rm --entrypoint=uname electrumx -a |
||||
|
|
||||
|
- name: Print ElectrumX version |
||||
|
run: docker run --rm electrumx --version |
||||
|
|
||||
|
- name: Save built image into a .tgz file |
||||
|
run: | |
||||
|
mkdir -p images/ |
||||
|
docker tag electrumx "electrumx:${{matrix.arch}}" |
||||
|
docker save "electrumx:${{matrix.arch}}" | gzip > "images/electrumx-${{matrix.arch}}.tgz" |
||||
|
- name: Print sha256sum of built image |
||||
|
run: sha256sum images/* |
||||
|
|
||||
|
- name: Upload built image |
||||
|
uses: actions/upload-artifact@v1.0.0 |
||||
|
with: |
||||
|
name: images |
||||
|
path: images/ |
||||
|
|
||||
|
|
||||
|
docker-hub-push: |
||||
|
name: Tag & deploy to Docker Hub. Only after successful build and on a git-tag push |
||||
|
|
||||
|
runs-on: ubuntu-18.04 |
||||
|
needs: build |
||||
|
steps: |
||||
|
- uses: actions/checkout@v1.0.0 |
||||
|
|
||||
|
- name: Setup environment |
||||
|
run: | |
||||
|
echo ::set-env name=DOCKER_USER::"${GITHUB_ACTOR,,}" |
||||
|
echo ::set-env name=SLUG::"$(echo ${GITHUB_REPOSITORY,,} | sed 's/docker-//')" |
||||
|
echo ::set-env name=VERSION::"$(echo "${GITHUB_REF}" | awk -F/ '{print $NF}')" |
||||
|
- name: Enable manifests |
||||
|
run: | |
||||
|
mkdir -p ~/.docker |
||||
|
echo '{ "experimental": "enabled" }' > ~/.docker/config.json |
||||
|
sudo systemctl restart docker |
||||
|
docker version |
||||
|
- name: Login to Docker Hub |
||||
|
run: | |
||||
|
echo "Logging in as ${DOCKER_USER}…" |
||||
|
echo "${{secrets.DOCKER_TOKEN}}" | docker login -u="${DOCKER_USER}" --password-stdin |
||||
|
- name: Download all build artifacts |
||||
|
uses: actions/download-artifact@v1.0.0 |
||||
|
with: |
||||
|
name: images |
||||
|
|
||||
|
- name: Print sha256sum of all images |
||||
|
run: sha256sum images/* |
||||
|
|
||||
|
- name: Load images locally |
||||
|
run: ls images/ | xargs -I % docker load -i "images/%" |
||||
|
|
||||
|
# No short tags. IMO electrumx version should always be specified exactly, and explicitly. |
||||
|
- name: Version-tag all images |
||||
|
run: docker images electrumx --format "{{.Tag}}" | xargs -I % docker tag "electrumx:%" "${SLUG}:${VERSION}-%" |
||||
|
|
||||
|
- name: List all tagged images |
||||
|
run: docker images "${SLUG}" |
||||
|
|
||||
|
- name: Push all images |
||||
|
run: docker images "${SLUG}" --format "{{.Repository}}:{{.Tag}}" | xargs -I % docker push % |
||||
|
|
||||
|
- name: Create manifest |
||||
|
run: > |
||||
|
docker -D manifest create "${SLUG}:${VERSION}" \ |
||||
|
"${SLUG}:${VERSION}-amd64" \ |
||||
|
"${SLUG}:${VERSION}-arm64" \ |
||||
|
"${SLUG}:${VERSION}-arm32v7" |
||||
|
- name: Annotate arm32v7 |
||||
|
run: docker manifest annotate "${SLUG}:${VERSION}" "${SLUG}:${VERSION}-arm32v7" --os linux --arch arm --variant v7 |
||||
|
|
||||
|
- name: Annotate arm64v8 |
||||
|
run: docker manifest annotate "${SLUG}:${VERSION}" "${SLUG}:${VERSION}-arm64" --os linux --arch arm64 --variant v8 |
||||
|
|
||||
|
- name: Push manifest |
||||
|
run: docker manifest push "${SLUG}:${VERSION}" |
||||
|
|
||||
|
- name: Sync README.md and Description to Docker Hub |
||||
|
uses: meeDamian/sync-readme@v1.0.5 |
||||
|
with: |
||||
|
pass: ${{secrets.DOCKER_TOKEN}} |
||||
|
description: true |
||||
|
|
||||
|
- name: Upload images to Github Release |
||||
|
uses: meeDamian/github-release@v1.0.1 |
||||
|
with: |
||||
|
token: ${{secrets.GITHUB_TOKEN}} |
||||
|
gzip: false |
||||
|
files: images/* |
Loading…
Reference in new issue