diff --git a/.github/workflows/launchpad_docker.yml b/.github/workflows/launchpad_docker.yml index 8873371945..7a77f2516f 100644 --- a/.github/workflows/launchpad_docker.yml +++ b/.github/workflows/launchpad_docker.yml @@ -1,9 +1,12 @@ +--- +name: Build launchpad docker images + on: push: tags: - "v[0-9]+.[0-9]+.[0-9]+" - # branches: - # - development + branches: + - build-gha-docker-* workflow_dispatch: inputs: docker_tag: @@ -11,8 +14,6 @@ on: required: true default: "development" -name: Build launchpad docker images - env: toolchain: nightly-2021-11-20 CARGO_HTTP_MULTIPLEXING: false @@ -26,69 +27,127 @@ jobs: matrix: image_name: [ + frontail, monerod, - tari_base_node, - tari_console_wallet, - tari_mm_proxy, - tari_sha3_miner, tor, xmrig, ] + include: + - image_name: tari_base_node + app_name: base_node + app_exec: tari_base_node + - image_name: tari_wallet + app_name: wallet + app_exec: tari_console_wallet + - image_name: tari_mm_proxy + app_name: mm_proxy + app_exec: tari_merge_mining_proxy + - image_name: tari_sha3_miner + app_name: sha3_miner + app_exec: tari_miner + runs-on: ubuntu-latest + steps: - name: checkout uses: actions/checkout@v3 + with: + submodules: recursive - name: set env + id: environments run: | TAG="" - REF=${{github.ref}} if [ "${{ startsWith(github.ref, 'refs/tags/v') }}" == "true" ] then + REF=${{github.ref}} TAG="${REF/refs\/tags\//}" echo "docker tag from git: $TAG" + else + # Pull App version from file + VAPP=$(awk -F ' = ' \ + '$1 ~ /version/ { gsub(/["]/, "", $2); printf("%s",$2) }' \ + "${GITHUB_WORKSPACE}/applications/tari_base_node/Cargo.toml") + + VBRANCH=$(echo ${GITHUB_REF#refs/heads/}) + VSHA_SHORT=$(git rev-parse --short HEAD) + + TAG="v${VAPP}_${VBRANCH}_$(date -u '+%Y%m%d')_${VSHA_SHORT}" + echo "docker tag from App Version _ git branch _ \ + date stamp _ git short hash: ${TAG}" fi + echo "event name: ${{ github.event_name }}" if [ "${{ github.event_name }}" == "workflow_dispatch" ] then TAG="${{ github.event.inputs.docker_tag }}" echo "docker tag from workflow dispatch: $TAG" fi - echo "TAG=$TAG" >> $GITHUB_ENV IMAGE=${{ matrix.image_name }} echo "image: $IMAGE" - TEMP=${IMAGE/tari_/} - # echo "temp: $TEMP" - SERVICE="${TEMP/console_/}" - - echo "service: $SERVICE" - echo "SERVICE=$SERVICE" >> $GITHUB_ENV - - name: build docker image - run: | - if [ -z $SERVICE ] + # Setup dockerfile to use + if [ "${IMAGE:0:5}" == "tari_" ] then - echo "service is undefined!" - exit 1 + echo ::set-output name=dockerfile::tarilabs.Dockerfile + # Strip tari_ + IMAGE=${IMAGE/tari_/} + # Strip console_ + IMAGE=${IMAGE/console_/} + echo ::set-output name=app_name::${IMAGE} + echo ::set-output name=dockercontext::./ + else + DOCKERFILE=${IMAGE}.Dockerfile + DOCKERCONTEXT=./applications/launchpad/docker_rig/ + + # Pull the docker image TAG from dockerfile + SUBTAG=$(awk -F '=' '/ARG .*_VERSION=/ \ + { gsub(/["]/, "", $2); printf("%s",$2) }' \ + "${GITHUB_WORKSPACE}/${DOCKERCONTEXT}${DOCKERFILE}") + + echo ::set-output name=dockerfile::${DOCKERFILE} + echo ::set-output name=dockercontext::${DOCKERCONTEXT} + + if [ ! -z "${SUBTAG}" ] + then + TAG="${SUBTAG}_${TAG}" + echo "Adding subtag: ${TAG}" + fi + fi - cd applications/launchpad/docker_rig - docker-compose build $SERVICE - - name: Login to Quay.io + # Set docker image tag + echo "tag: ${TAG}" + echo ::set-output name=tag::$TAG + + - name: Login to Docker Image Provider uses: docker/login-action@v1 with: - registry: quay.io + registry: ${{ secrets.DOCKER_PROVIDER }} username: ${{ secrets.QUAY_USERNAME }} password: ${{ secrets.QUAY_ROBOT_TOKEN }} - - name: tag and push image - run: | - echo "tag: $TAG" - if [ -n "$TAG" ] - then - docker tag quay.io/tarilabs/${{ matrix.image_name }}:latest quay.io/tarilabs/${{ matrix.image_name }}:$TAG + - name: Set up QEMU for Docker + uses: docker/setup-qemu-action@v2 - docker push quay.io/tarilabs/${{ matrix.image_name }}:latest - docker push quay.io/tarilabs/${{ matrix.image_name }}:$TAG - fi + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Docker image build and push + uses: docker/build-push-action@v3 + with: + context: ${{ steps.environments.outputs.dockercontext }} + file: ./applications/launchpad/docker_rig/${{ steps.environments.outputs.dockerfile }} + platforms: linux/arm64, linux/amd64 + push: true + cache-from: type=gha + cache-to: type=gha,mode=max + build-args: | + VERSION=${{ steps.environments.outputs.tag }} + APP_NAME=${{ matrix.app_name }} + APP_EXEC=${{ matrix.app_exec }} + tags: | + ${{ secrets.DOCKER_PROVIDER }}/${{ secrets.DOCKER_REPO }}/${{ matrix.image_name }}:latest + ${{ secrets.DOCKER_PROVIDER }}/${{ secrets.DOCKER_REPO }}/${{ matrix.image_name }}:${{ steps.environments.outputs.tag }}