diff --git a/.github/actions/build-docker-images-generic/action.yml b/.github/actions/build-docker-images-generic/action.yml new file mode 100644 index 0000000000..245ac8a631 --- /dev/null +++ b/.github/actions/build-docker-images-generic/action.yml @@ -0,0 +1,71 @@ +name: 'Build Docker Images' +description: 'Builds Docker images and pushes them to any repository.' +inputs: + DOCKER_FILENAME: + description: 'Name of the docker file to use for the build' + required: true + REPOSITORY_NAME: + description: 'Name of the Repository' + required: true + IMAGE_TAG: + description: 'Image Tag' + required: true + REGISTRY: + description: 'Docker or ORG you want to push to.' + required: true + DOCKER_ORG: + description: 'Docker ORG you want to push to.' + required: false + USERNAME: + description: 'Username for GitHub Container Registry' + required: true + TOKEN: + description: 'Token for GitHub Container Registry' + required: true + DOCKER_FILE_DIRECTORY: + description: 'Directory for your Dockerfile' + required: true + DOCKER_BUILD_KIT: + description: "whether or not to use docker build kit." + required: true + TAG_LATEST: + description: "should the pipeline tag latest" + required: true +runs: + using: "composite" + + steps: + - name: Set Environment Variables" + run: | + echo "DOCKER_BUILDKIT=${{ inputs.DOCKER_BUILD_KIT }}" >> $GITHUB_ENV + shell: bash + + - name: Log in to the Docker Registry + uses: docker/login-action@v2 + with: + registry: ${{ inputs.REGISTRY }} + username: ${{ inputs.USERNAME }} + password: ${{ inputs.TOKEN }} + + - name: Build, tag, and push images + shell: bash + working-directory: ${{ inputs.DOCKER_FILE_DIRECTORY }} + run: | + if [ ! -z "${{ inputs.DOCKER_ORG }}" ]; then + echo "DOCKER ORG SPECIFIED SO USE DOCKER HUB" + docker build -f ${{ inputs.DOCKER_FILENAME }} -t ${{ inputs.DOCKER_ORG }}/${{ inputs.REPOSITORY_NAME }}:${{ inputs.IMAGE_TAG }} . + docker push ${{ inputs.DOCKER_ORG }}/${{ inputs.REPOSITORY_NAME }}:${{ inputs.IMAGE_TAG }} + + if [ "${{ inputs.TAG_LATEST }}" == "true" ]; then + docker tag ${{ inputs.DOCKER_ORG }}/${{ inputs.REPOSITORY_NAME }}:${{ inputs.IMAGE_TAG }} ${{ inputs.DOCKER_ORG }}/${{ inputs.REPOSITORY_NAME }}:latest + docker push ${{ inputs.DOCKER_ORG }}/${{ inputs.REPOSITORY_NAME }}:latest + fi + else + echo "DOCKER REGISTRY SPECIFIED WITH NO DOCKER_ORG USE NON ORG REGISTRIES" + docker build -f ${{ inputs.DOCKER_FILENAME }} -t ${{ inputs.REGISTRY }}/${{ inputs.REPOSITORY_NAME }}:${{ inputs.IMAGE_TAG }} . + docker push ${{ inputs.REGISTRY }}/${{ inputs.REPOSITORY_NAME }}:${{ inputs.IMAGE_TAG }} + if [ "${{ inputs.TAG_LATEST }}" == "true" ]; then + docker tag ${{ inputs.REGISTRY }}/${{ inputs.REPOSITORY_NAME }}:${{ inputs.IMAGE_TAG }} ${{ inputs.REGISTRY }}/${{ inputs.REPOSITORY_NAME }}:latest + docker push ${{ inputs.REGISTRY }}/${{ inputs.REPOSITORY_NAME }}:latest + fi + fi diff --git a/.github/workflows/docker-build-and-push.yml b/.github/workflows/docker-build-and-push.yml new file mode 100644 index 0000000000..6fc54ed7f9 --- /dev/null +++ b/.github/workflows/docker-build-and-push.yml @@ -0,0 +1,120 @@ +name: Zetacored-Docker-Build + +on: + pull_request: + types: + - closed + branches: + - 'main' + workflow_dispatch: + inputs: + version: + description: 'Docker Tag Version For Manual Execution' + required: false + default: '' + +concurrency: + group: Zetacored-Docker-Build + cancel-in-progress: false + +env: + DOCKER_REPO: "zeatcored" + DOCKER_ORG: "zetachain" + DOCKER_REGISTRY: "https://index.docker.io/v1/" + +jobs: + docker_build_ubuntu: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set Version from the PR title. + if: github.event_name == 'pull_request' + run: | + echo "GITHUB_TAG_MAJOR_VERSION=${{ github.event.pull_request.title }}" >> ${GITHUB_ENV} + + - name: Set Version for Hotfix Release from Input. + if: github.event_name != 'pull_request' + run: | + echo "GITHUB_TAG_MAJOR_VERSION=${{ github.event.inputs.version }}" >> ${GITHUB_ENV} + + - name: "BUILD:PUSH:MONITORING:DOCKER:IMAGE" + uses: ./.github/actions/build-docker-images-generic + with: + DOCKER_FILENAME: "Dockerfile" + REPOSITORY_NAME: "${{ env.DOCKER_REPO }}" + IMAGE_TAG: "ubuntu-${{ env.GITHUB_TAG_MAJOR_VERSION }}" + REGISTRY: "${{ env.DOCKER_REGISTRY }}" + DOCKER_ORG: "${{ env.DOCKER_ORG }}" + USERNAME: "${{ secrets.DOCKER_HUB_USERNAME }}" + TOKEN: "${{ secrets.DOCKERHUB_TOKEN }}" + DOCKER_FILE_DIRECTORY: "./" + DOCKER_BUILD_KIT: "0" + TAG_LATEST: "true" + + docker_build_mac: + runs-on: macos-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set Version from the PR title. + if: github.event_name == 'pull_request' + run: | + echo "GITHUB_TAG_MAJOR_VERSION=${{ github.event.pull_request.title }}" >> ${GITHUB_ENV} + + - name: Set Version for Hotfix Release from Input. + if: github.event_name != 'pull_request' + run: | + echo "GITHUB_TAG_MAJOR_VERSION=${{ github.event.inputs.version }}" >> ${GITHUB_ENV} + + - name: "BUILD:PUSH:MONITORING:DOCKER:IMAGE" + uses: ./.github/actions/build-docker-images-generic + with: + DOCKER_FILENAME: "Dockerfile" + REPOSITORY_NAME: "${{ env.DOCKER_REPO }}" + IMAGE_TAG: "mac-${{ env.GITHUB_TAG_MAJOR_VERSION }}" + REGISTRY: "${{ env.DOCKER_REGISTRY }}" + DOCKER_ORG: "${{ env.DOCKER_ORG }}" + USERNAME: "${{ secrets.DOCKER_HUB_USERNAME }}" + TOKEN: "${{ secrets.DOCKERHUB_TOKEN }}" + DOCKER_FILE_DIRECTORY: "./" + DOCKER_BUILD_KIT: "0" + TAG_LATEST: "false" + + docker_build_arm: + runs-on: buildjet-4vcpu-ubuntu-2204-arm + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set Version from the PR title. + if: github.event_name == 'pull_request' + run: | + echo "GITHUB_TAG_MAJOR_VERSION=${{ github.event.pull_request.title }}" >> ${GITHUB_ENV} + + - name: Set Version for Hotfix Release from Input. + if: github.event_name != 'pull_request' + run: | + echo "GITHUB_TAG_MAJOR_VERSION=${{ github.event.inputs.version }}" >> ${GITHUB_ENV} + + - name: "BUILD:PUSH:MONITORING:DOCKER:IMAGE" + uses: ./.github/actions/build-docker-images-generic + with: + DOCKER_FILENAME: "Dockerfile" + REPOSITORY_NAME: "${{ env.DOCKER_REPO }}" + IMAGE_TAG: "arm-${{ env.GITHUB_TAG_MAJOR_VERSION }}" + REGISTRY: "${{ env.DOCKER_REGISTRY }}" + DOCKER_ORG: "${{ env.DOCKER_ORG }}" + USERNAME: "${{ secrets.DOCKER_HUB_USERNAME }}" + TOKEN: "${{ secrets.DOCKERHUB_TOKEN }}" + DOCKER_FILE_DIRECTORY: "./" + DOCKER_BUILD_KIT: "0" + TAG_LATEST: "false" \ No newline at end of file diff --git a/changelog.md b/changelog.md index 2d8f311c7c..1ad986c8b5 100644 --- a/changelog.md +++ b/changelog.md @@ -3,7 +3,6 @@ ## Unreleased * `zetaclientd start` : 2 inputs required from stdin -* Added docker-compose and make commands for launching full nodes. `make mainnet-zetarpc-node` `make mainnet-bitcoind-node` ### Docs @@ -32,6 +31,8 @@ ### CI +* CI: adding pipeline to build and push docker images into dockerhub on release for ubuntu and macos. +* Added docker-compose and make commands for launching full nodes. `make mainnet-zetarpc-node` `make mainnet-bitcoind-node` * [1736](https://github.com/zeta-chain/node/pull/1736) - chore: add Ethermint endpoints to OpenAPI ### Chores