Skip to content

Build packages

Build packages #401

name: Build packages
# Big chunk of the build process logic is in the mage build targets
on:
workflow_call:
push:
branches: [master]
tags:
- '*'
schedule:
- cron: '0 2 * * *'
env:
GITHUB_OWNER: mysteriumnetwork
GITHUB_REPO: node
GITHUB_SNAPSHOT_REPO: node-builds
GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_EC2_METADATA_DISABLED: true # disable AWS region lookup
jobs:
setup-env:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- name: Prepare environment
run: |
RELEASE_BUILD=false
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then RELEASE_BUILD=true; fi
RC_BUILD=false
if [[ "${GITHUB_REF}" == refs/tags/*-rc* ]]; then RC_BUILD=true; fi
SNAPSHOT_BUILD=false
if [[ "${GITHUB_REF}" == "refs/heads/master" ]]; then SNAPSHOT_BUILD=true; fi
PR_BUILD=false
if [[ "${SNAPSHOT_BUILD}" == "false" && "${RELEASE_BUILD}" == "false" ]]; then PR_BUILD=true; fi
if [[ "${RELEASE_BUILD}" == "true" ]]; then
BUILD_VERSION="${GITHUB_REF#refs/tags/}";
elif [[ "${SNAPSHOT_BUILD}" == "true" ]]; then
BUILD_VERSION="$(git describe --abbrev=0 --tags)"-1snapshot-"$(date '+%Y%m%dT%H%M')"-"$(echo ${GITHUB_SHA} | cut -c1-8)";
elif [[ "${PR_BUILD}" == "true" ]]; then
BRANCH="${GITHUB_HEAD_REF////-}"
if [[ "${BRANCH}" == "" ]]; then BRANCH="${GITHUB_REF_NAME}"; fi
BUILD_VERSION="$(git describe --abbrev=0 --tags)"-1branch-"${BRANCH}";
fi
cat <<EOT >> env.sh
export RELEASE_BUILD=$RELEASE_BUILD;
export RC_BUILD=$RC_BUILD;
export PR_BUILD=$PR_BUILD;
export SNAPSHOT_BUILD=$SNAPSHOT_BUILD;
export BUILD_VERSION=$BUILD_VERSION;
export BUILD_NUMBER="${{ github.run_id }}";
export BUILD_COMMIT="$(echo ${GITHUB_SHA} | cut -c1-8)";
export BUILD_BRANCH="${GITHUB_REF_NAME}";
EOT
- uses: actions/upload-artifact@v4
with:
name: env.sh
path: env.sh
- name: Create bucket
if: |
github.ref == 'refs/heads/master' ||
github.ref_type == 'tag'
run: |
source env.sh
go run mage.go -v MakeBucket
build-packages:
runs-on: ubuntu-latest
needs: [setup-env]
strategy:
max-parallel: 6
matrix:
platform:
- PackageLinuxRaspberryImage
- PackageLinuxAmd64
- PackageLinuxArm
- PackageLinuxDebianAmd64
- PackageLinuxDebianArm64
- PackageLinuxDebianArmv6l
- PackageLinuxDebianArm
- PackageMacOSAmd64
- PackageMacOSArm64
- PackageWindowsAmd64
- PackageAndroid
- PackageAndroidProvider
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- uses: actions/download-artifact@v4
with:
name: env.sh
- name: Setup FPM
run: |
sudo apt-get update
sudo apt-get install ruby-dev build-essential
sudo gem i fpm -f
- name: Build package
run: |
source env.sh
unset CI # workaround for "PackageAndroid" target
sudo -E go run mage.go -v ${{ matrix.platform }}
build-swagger:
runs-on: ubuntu-latest
needs: [setup-env, build-packages]
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- uses: actions/download-artifact@v4
with:
name: env.sh
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build docker
run: |
source env.sh
go run mage.go -v PackageDockerSwaggerRedoc
release:
needs: [build-packages, build-swagger]
uses: ./.github/workflows/release.yml
secrets: inherit
if: |
github.ref == 'refs/heads/master' ||
github.ref_type == 'tag'
cleanup-env:
runs-on: ubuntu-latest
needs: [release]
if: |
always() &&
(github.ref == 'refs/heads/master' || github.ref_type == 'tag')
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.21.x'
- uses: actions/download-artifact@v4
with:
name: env.sh
- name: Remove bucket
run: |
source env.sh
go run mage.go -v RemoveBucket || true # ignore if bucket was not available