Skip to content

Commit 00fe02c

Browse files
committed
feat(ci): extract docker container building
1 parent 6ff26b0 commit 00fe02c

File tree

2 files changed

+135
-93
lines changed

2 files changed

+135
-93
lines changed

.github/workflows/ci.yml

Lines changed: 7 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -622,100 +622,14 @@ jobs:
622622
uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
623623

624624

625-
deploy-docker:
625+
docker-build:
626+
name: "Docker Build and Deploy"
626627
needs: [ build-linux, build-macos, build-windows, docs-check, mypy-version-check, pre-commit ]
627-
runs-on: ubuntu-22.04
628-
629628
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && github.repository == 'freqtrade/freqtrade'
630-
631-
steps:
632-
- uses: actions/checkout@v4
633-
with:
634-
persist-credentials: false
635-
636-
- name: Set up Python
637-
uses: actions/setup-python@v5
638-
with:
639-
python-version: "3.12"
640-
641-
- name: Extract branch name
642-
id: extract-branch
643-
run: |
644-
echo "GITHUB_REF='${GITHUB_REF}'"
645-
echo "branch=${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT"
646-
647-
- name: Dockerhub login
648-
env:
649-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
650-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
651-
run: |
652-
echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin
653-
654-
# We need docker experimental to pull the ARM image.
655-
- name: Switch docker to experimental
656-
run: |
657-
docker version -f '{{.Server.Experimental}}'
658-
echo $'{\n "experimental": true\n}' | sudo tee /etc/docker/daemon.json
659-
sudo systemctl restart docker
660-
docker version -f '{{.Server.Experimental}}'
661-
662-
- name: Set up QEMU
663-
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
664-
665-
- name: Set up Docker Buildx
666-
id: buildx
667-
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0
668-
669-
- name: Available platforms
670-
run: echo ${PLATFORMS}
671-
env:
672-
PLATFORMS: ${{ steps.buildx.outputs.platforms }}
673-
674-
- name: Build and test and push docker images
675-
env:
676-
BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }}
677-
run: |
678-
build_helpers/publish_docker_multi.sh
679-
680-
deploy-arm:
681-
name: "Deploy Docker"
629+
uses: ./.github/workflows/docker-build.yml
682630
permissions:
683631
packages: write
684-
needs: [ deploy-docker ]
685-
# Only run on 64bit machines
686-
runs-on: [self-hosted, linux, ARM64]
687-
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && github.repository == 'freqtrade/freqtrade'
688-
689-
steps:
690-
- uses: actions/checkout@v4
691-
with:
692-
persist-credentials: false
693-
694-
- name: Extract branch name
695-
id: extract-branch
696-
run: |
697-
echo "GITHUB_REF='${GITHUB_REF}'"
698-
echo "branch=${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT"
699-
700-
- name: Dockerhub login
701-
env:
702-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
703-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
704-
run: |
705-
echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin
706-
707-
- name: Build and test and push docker images
708-
env:
709-
BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }}
710-
GHCR_USERNAME: ${{ github.actor }}
711-
GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }}
712-
run: |
713-
build_helpers/publish_docker_arm64.sh
714-
715-
- name: Discord notification
716-
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
717-
if: always() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false) && (github.event_name != 'schedule')
718-
with:
719-
severity: info
720-
details: Deploy Succeeded!
721-
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}
632+
secrets:
633+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
634+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
635+
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}

.github/workflows/docker-build.yml

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
name: Docker Build and Deploy
2+
3+
on:
4+
workflow_call:
5+
secrets:
6+
DOCKER_PASSWORD:
7+
required: true
8+
DOCKER_USERNAME:
9+
required: true
10+
DISCORD_WEBHOOK:
11+
required: false
12+
workflow_dispatch:
13+
inputs:
14+
branch_name:
15+
description: 'Branch name to build Docker images for'
16+
required: false
17+
default: 'develop'
18+
type: string
19+
20+
permissions:
21+
packages: write
22+
23+
jobs:
24+
deploy-docker:
25+
runs-on: ubuntu-22.04
26+
if: github.repository == 'freqtrade/freqtrade'
27+
28+
steps:
29+
- uses: actions/checkout@v4
30+
with:
31+
persist-credentials: false
32+
33+
- name: Set up Python
34+
uses: actions/setup-python@v5
35+
with:
36+
python-version: "3.12"
37+
38+
- name: Extract branch name
39+
id: extract-branch
40+
run: |
41+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
42+
BRANCH_NAME="${{ inputs.branch_name }}"
43+
else
44+
BRANCH_NAME="${GITHUB_REF##*/}"
45+
fi
46+
echo "GITHUB_REF='${GITHUB_REF}'"
47+
echo "branch=${BRANCH_NAME}" >> "$GITHUB_OUTPUT"
48+
49+
- name: Dockerhub login
50+
env:
51+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
52+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
53+
run: |
54+
echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin
55+
56+
# We need docker experimental to pull the ARM image.
57+
- name: Switch docker to experimental
58+
run: |
59+
docker version -f '{{.Server.Experimental}}'
60+
echo $'{\n "experimental": true\n}' | sudo tee /etc/docker/daemon.json
61+
sudo systemctl restart docker
62+
docker version -f '{{.Server.Experimental}}'
63+
64+
- name: Set up QEMU
65+
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
66+
67+
- name: Set up Docker Buildx
68+
id: buildx
69+
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 #v3.10.0
70+
71+
- name: Available platforms
72+
run: echo ${PLATFORMS}
73+
env:
74+
PLATFORMS: ${{ steps.buildx.outputs.platforms }}
75+
76+
- name: Build and test and push docker images
77+
env:
78+
BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }}
79+
run: |
80+
build_helpers/publish_docker_multi.sh
81+
82+
deploy-arm:
83+
name: "Deploy Docker"
84+
permissions:
85+
packages: write
86+
needs: [ deploy-docker ]
87+
# Only run on 64bit machines
88+
runs-on: [self-hosted, linux, ARM64]
89+
if: github.repository == 'freqtrade/freqtrade'
90+
91+
steps:
92+
- uses: actions/checkout@v4
93+
with:
94+
persist-credentials: false
95+
96+
- name: Extract branch name
97+
id: extract-branch
98+
run: |
99+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
100+
BRANCH_NAME="${{ inputs.branch_name }}"
101+
else
102+
BRANCH_NAME="${GITHUB_REF##*/}"
103+
fi
104+
echo "GITHUB_REF='${GITHUB_REF}'"
105+
echo "branch=${BRANCH_NAME}" >> "$GITHUB_OUTPUT"
106+
107+
- name: Dockerhub login
108+
env:
109+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
110+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
111+
run: |
112+
echo "${DOCKER_PASSWORD}" | docker login --username ${DOCKER_USERNAME} --password-stdin
113+
114+
- name: Build and test and push docker images
115+
env:
116+
BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }}
117+
GHCR_USERNAME: ${{ github.actor }}
118+
GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }}
119+
run: |
120+
build_helpers/publish_docker_arm64.sh
121+
122+
- name: Discord notification
123+
uses: rjstone/discord-webhook-notify@1399c1b2d57cc05894d506d2cfdc33c5f012b993 #v1.1.1
124+
if: always() && ( github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork == false) && (github.event_name != 'schedule')
125+
with:
126+
severity: info
127+
details: Deploy Succeeded!
128+
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}

0 commit comments

Comments
 (0)