diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 263ad5db7..ace4da229 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -622,100 +622,14 @@ jobs: uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4 - deploy-docker: + docker-build: + name: "Docker Build and Deploy" needs: [ build-linux, build-macos, build-windows, docs-check, mypy-version-check, pre-commit ] - runs-on: ubuntu-22.04 - if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && github.repository == 'freqtrade/freqtrade' - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Extract branch name - id: extract-branch - run: | - echo "GITHUB_REF='${GITHUB_REF}'" - echo "branch=${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT" - - - name: Dockerhub login - env: - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - run: | - echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin - - # We need docker experimental to pull the ARM image. - - name: Switch docker to experimental - run: | - docker version -f '{{.Server.Experimental}}' - echo $'{\n "experimental": true\n}' | sudo tee /etc/docker/daemon.json - sudo systemctl restart docker - docker version -f '{{.Server.Experimental}}' - - - name: Set up QEMU - uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 - - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0 - - - name: Available platforms - run: echo ${PLATFORMS} - env: - PLATFORMS: ${{ steps.buildx.outputs.platforms }} - - - name: Build and test and push docker images - env: - BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }} - run: | - build_helpers/publish_docker_multi.sh - - deploy-arm: - name: "Deploy Docker" + uses: ./.github/workflows/docker-build.yml permissions: packages: write - needs: [ deploy-docker ] - # Only run on 64bit machines - runs-on: [self-hosted, linux, ARM64] - if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && github.repository == 'freqtrade/freqtrade' - - steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - - name: Extract branch name - id: extract-branch - run: | - echo "GITHUB_REF='${GITHUB_REF}'" - echo "branch=${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT" - - - name: Dockerhub login - env: - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - run: | - echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin - - - name: Build and test and push docker images - env: - BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }} - GHCR_USERNAME: ${{ github.actor }} - GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - build_helpers/publish_docker_arm64.sh - - - name: Discord notification - uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1 - if: always() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false) && (github.event_name != 'schedule') - with: - severity: info - details: Deploy Succeeded! - webhookUrl: ${{ secrets.DISCORD_WEBHOOK }} + secrets: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 000000000..d842ef118 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,128 @@ +name: Docker Build and Deploy + +on: + workflow_call: + secrets: + DOCKER_PASSWORD: + required: true + DOCKER_USERNAME: + required: true + DISCORD_WEBHOOK: + required: false + workflow_dispatch: + inputs: + branch_name: + description: 'Branch name to build Docker images for' + required: false + default: 'develop' + type: string + +permissions: + packages: write + +jobs: + deploy-docker: + runs-on: ubuntu-22.04 + if: github.repository == 'freqtrade/freqtrade' + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Extract branch name + id: extract-branch + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + BRANCH_NAME="${{ inputs.branch_name }}" + else + BRANCH_NAME="${GITHUB_REF##*/}" + fi + echo "GITHUB_REF='${GITHUB_REF}'" + echo "branch=${BRANCH_NAME}" >> "$GITHUB_OUTPUT" + + - name: Dockerhub login + env: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + + # We need docker experimental to pull the ARM image. + - name: Switch docker to experimental + run: | + docker version -f '{{.Server.Experimental}}' + echo $'{\n "experimental": true\n}' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + docker version -f '{{.Server.Experimental}}' + + - name: Set up QEMU + uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0 + + - name: Available platforms + run: echo ${PLATFORMS} + env: + PLATFORMS: ${{ steps.buildx.outputs.platforms }} + + - name: Build and test and push docker images + env: + BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }} + run: | + build_helpers/publish_docker_multi.sh + + deploy-arm: + name: "Deploy Docker" + permissions: + packages: write + needs: [ deploy-docker ] + # Only run on 64bit machines + runs-on: [self-hosted, linux, ARM64] + if: github.repository == 'freqtrade/freqtrade' + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Extract branch name + id: extract-branch + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + BRANCH_NAME="${{ inputs.branch_name }}" + else + BRANCH_NAME="${GITHUB_REF##*/}" + fi + echo "GITHUB_REF='${GITHUB_REF}'" + echo "branch=${BRANCH_NAME}" >> "$GITHUB_OUTPUT" + + - name: Dockerhub login + env: + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin + + - name: Build and test and push docker images + env: + BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }} + GHCR_USERNAME: ${{ github.actor }} + GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + build_helpers/publish_docker_arm64.sh + + - name: Discord notification + uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1 + if: always() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false) && (github.event_name != 'schedule') + with: + severity: info + details: Deploy Succeeded! + webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}