From 44b65daf1ce851719acf321a55278efc451a6e6f Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Sep 2025 19:49:38 +0200 Subject: [PATCH] chore(ci): Switch to use outputs instead of global environments --- .github/actions/docker-tags/action.yml | 37 ++++------- .github/workflows/docker-build.yml | 89 +++++++++++++++++++------- 2 files changed, 78 insertions(+), 48 deletions(-) diff --git a/.github/actions/docker-tags/action.yml b/.github/actions/docker-tags/action.yml index bac281d6d..3ddd2fadf 100644 --- a/.github/actions/docker-tags/action.yml +++ b/.github/actions/docker-tags/action.yml @@ -32,32 +32,21 @@ runs: CACHE_TAG_PI=${CACHE_IMAGE}:${TAG_PI}_cache - echo "GITHUB_REF='${GITHUB_REF}'" - echo "BRANCH_NAME='${BRANCH_NAME}'" - echo "TAG='${TAG}'" - echo "TAG_PLOT='${TAG_PLOT}'" - echo "TAG_FREQAI='${TAG_FREQAI}'" - echo "TAG_FREQAI_RL='${TAG_FREQAI_RL}'" - echo "TAG_FREQAI_TORCH='${TAG_FREQAI_TORCH}'" - echo "TAG_ARM='${TAG_ARM}'" - echo "TAG_PLOT_ARM='${TAG_PLOT_ARM}'" - echo "TAG_FREQAI_ARM='${TAG_FREQAI_ARM}'" - echo "TAG_FREQAI_RL_ARM='${TAG_FREQAI_RL_ARM}'" - echo "TAG_PI='${TAG_PI}'" + echo "BRANCH_NAME=${BRANCH_NAME}" >> "$GITHUB_OUTPUT" + echo "TAG=${TAG}" >> "$GITHUB_OUTPUT" + echo "TAG_PLOT=${TAG_PLOT}" >> "$GITHUB_OUTPUT" + echo "TAG_FREQAI=${TAG_FREQAI}" >> "$GITHUB_OUTPUT" + echo "TAG_FREQAI_RL=${TAG_FREQAI_RL}" >> "$GITHUB_OUTPUT" + echo "TAG_FREQAI_TORCH=${TAG_FREQAI_TORCH}" >> "$GITHUB_OUTPUT" + echo "TAG_ARM=${TAG_ARM}" >> "$GITHUB_OUTPUT" + echo "TAG_PLOT_ARM=${TAG_PLOT_ARM}" >> "$GITHUB_OUTPUT" + echo "TAG_FREQAI_ARM=${TAG_FREQAI_ARM}" >> "$GITHUB_OUTPUT" + echo "TAG_FREQAI_RL_ARM=${TAG_FREQAI_RL_ARM}" >> "$GITHUB_OUTPUT" + echo "TAG_PI=${TAG_PI}" >> "$GITHUB_OUTPUT" - echo "BRANCH_NAME=${BRANCH_NAME}" >> "$GITHUB_ENV" - echo "TAG=${TAG}" >> "$GITHUB_ENV" - echo "TAG_PLOT=${TAG_PLOT}" >> "$GITHUB_ENV" - echo "TAG_FREQAI=${TAG_FREQAI}" >> "$GITHUB_ENV" - echo "TAG_FREQAI_RL=${TAG_FREQAI_RL}" >> "$GITHUB_ENV" - echo "TAG_FREQAI_TORCH=${TAG_FREQAI_TORCH}" >> "$GITHUB_ENV" - echo "TAG_ARM=${TAG_ARM}" >> "$GITHUB_ENV" - echo "TAG_PLOT_ARM=${TAG_PLOT_ARM}" >> "$GITHUB_ENV" - echo "TAG_FREQAI_ARM=${TAG_FREQAI_ARM}" >> "$GITHUB_ENV" - echo "TAG_FREQAI_RL_ARM=${TAG_FREQAI_RL_ARM}" >> "$GITHUB_ENV" - echo "TAG_PI=${TAG_PI}" >> "$GITHUB_ENV" + echo "CACHE_TAG_PI=${CACHE_TAG_PI}" >> "$GITHUB_OUTPUT" - echo "CACHE_TAG_PI=${CACHE_TAG_PI}" >> "$GITHUB_ENV" + cat "$GITHUB_OUTPUT" - name: Save commit SHA to file shell: bash diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 6710889a9..4be322b2e 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -38,6 +38,7 @@ jobs: persist-credentials: false - name: Set docker tag names + id: tags uses: ./.github/actions/docker-tags - name: Login to Docker Hub @@ -62,11 +63,16 @@ jobs: - name: Build image without cache if: github.event_name == 'schedule' + env: + TAG: ${{ steps.tags.outputs.TAG }} run: | - docker build -t freqtrade:${TAG} . + docker build -t ${IMAGE_NAME}:${TAG} . - name: Build ARMHF image without cache if: github.event_name == 'schedule' + env: + TAG_PI: ${{ steps.tags.outputs.TAG_PI }} + CACHE_TAG_PI: ${{ steps.tags.outputs.CACHE_TAG_PI }} run: | docker buildx build \ --cache-to=type=registry,ref=${CACHE_TAG_PI} \ @@ -79,9 +85,11 @@ jobs: - name: Build image with cache if: github.event_name != 'schedule' + env: + TAG: ${{ steps.tags.outputs.TAG }} run: | docker pull ${IMAGE_NAME}:${TAG} || true - docker build --cache-from ${IMAGE_NAME}:${TAG} -t freqtrade:${TAG} . + docker build --cache-from ${IMAGE_NAME}:${TAG} -t ${CACHE_IMAGE}:${TAG} . - name: Build ARMHF image with cache if: github.event_name != 'schedule' @@ -98,23 +106,29 @@ jobs: . - name: Run build for AI images + env: + TAG: ${{ steps.tags.outputs.TAG }} + TAG_PLOT: ${{ steps.tags.outputs.TAG_PLOT }} + TAG_FREQAI: ${{ steps.tags.outputs.TAG_FREQAI }} + TAG_FREQAI_RL: ${{ steps.tags.outputs.TAG_FREQAI_RL }} run: | - docker build --build-arg sourceimage=freqtrade --build-arg sourcetag=${TAG} -t freqtrade:${TAG_PLOT} -f docker/Dockerfile.plot . - docker build --build-arg sourceimage=freqtrade --build-arg sourcetag=${TAG} -t freqtrade:${TAG_FREQAI} -f docker/Dockerfile.freqai . - docker build --build-arg sourceimage=freqtrade --build-arg sourcetag=${TAG_FREQAI} -t freqtrade:${TAG_FREQAI_RL} -f docker/Dockerfile.freqai_rl . + docker build --build-arg sourceimage=${CACHE_IMAGE} --build-arg sourcetag=${TAG} -t ${CACHE_IMAGE}:${TAG_PLOT} -f docker/Dockerfile.plot . + docker build --build-arg sourceimage=${CACHE_IMAGE} --build-arg sourcetag=${TAG} -t ${CACHE_IMAGE}:${TAG_FREQAI} -f docker/Dockerfile.freqai . + docker build --build-arg sourceimage=${CACHE_IMAGE} --build-arg sourcetag=${TAG_FREQAI} -t ${CACHE_IMAGE}:${TAG_FREQAI_RL} -f docker/Dockerfile.freqai_rl . - - name: Tag images for caching - run: | - docker tag freqtrade:$TAG ${CACHE_IMAGE}:$TAG - docker tag freqtrade:$TAG_PLOT ${CACHE_IMAGE}:$TAG_PLOT - docker tag freqtrade:$TAG_FREQAI ${CACHE_IMAGE}:$TAG_FREQAI - docker tag freqtrade:$TAG_FREQAI_RL ${CACHE_IMAGE}:$TAG_FREQAI_RL - name: Run backtest in Docker + env: + TAG: ${{ steps.tags.outputs.TAG }} run: | - docker run --rm -v $(pwd)/tests/testdata/config.tests.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3 + docker run --rm -v $(pwd)/tests/testdata/config.tests.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests ${CACHE_IMAGE}:${TAG} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3 - name: Push cache images + env: + TAG: ${{ steps.tags.outputs.TAG }} + TAG_PLOT: ${{ steps.tags.outputs.TAG_PLOT }} + TAG_FREQAI: ${{ steps.tags.outputs.TAG_FREQAI }} + TAG_FREQAI_RL: ${{ steps.tags.outputs.TAG_FREQAI_RL }} run: | docker push ${CACHE_IMAGE}:$TAG docker push ${CACHE_IMAGE}:$TAG_PLOT @@ -140,6 +154,7 @@ jobs: persist-credentials: false - name: Set docker tag names + id: tags uses: ./.github/actions/docker-tags - name: Login to Docker Hub @@ -157,37 +172,46 @@ jobs: - name: Build image without cache if: github.event_name == 'schedule' + env: + TAG_ARM: ${{ steps.tags.outputs.TAG_ARM }} run: | - docker build -t freqtrade:${TAG_ARM} . + docker build -t ${IMAGE_NAME}:${TAG_ARM} . - name: Build image with cache if: github.event_name != 'schedule' + env: + TAG_ARM: ${{ steps.tags.outputs.TAG_ARM }} run: | docker pull ${IMAGE_NAME}:${TAG_ARM} || true - docker build --cache-from ${IMAGE_NAME}:${TAG_ARM} -t freqtrade:${TAG_ARM} . + docker build --cache-from ${IMAGE_NAME}:${TAG_ARM} -t ${CACHE_IMAGE}:${TAG_ARM} . - name: Run build for AI images + env: + TAG_PLOT_ARM: ${{ steps.tags.outputs.TAG_PLOT_ARM }} + TAG_FREQAI_ARM: ${{ steps.tags.outputs.TAG_FREQAI_ARM }} + TAG_FREQAI_RL_ARM: ${{ steps.tags.outputs.TAG_FREQAI_RL_ARM }} run: | - docker build --build-arg sourceimage=freqtrade --build-arg sourcetag=${TAG_ARM} -t freqtrade:${TAG_PLOT_ARM} -f docker/Dockerfile.plot . - docker build --build-arg sourceimage=freqtrade --build-arg sourcetag=${TAG_ARM} -t freqtrade:${TAG_FREQAI_ARM} -f docker/Dockerfile.freqai . - docker build --build-arg sourceimage=freqtrade --build-arg sourcetag=${TAG_FREQAI_ARM} -t freqtrade:${TAG_FREQAI_RL_ARM} -f docker/Dockerfile.freqai_rl . + docker build --build-arg sourceimage=${CACHE_IMAGE} --build-arg sourcetag=${TAG_ARM} -t ${CACHE_IMAGE}:${TAG_PLOT_ARM} -f docker/Dockerfile.plot . + docker build --build-arg sourceimage=${CACHE_IMAGE} --build-arg sourcetag=${TAG_ARM} -t ${CACHE_IMAGE}:${TAG_FREQAI_ARM} -f docker/Dockerfile.freqai . + docker build --build-arg sourceimage=${CACHE_IMAGE} --build-arg sourcetag=${TAG_FREQAI_ARM} -t ${CACHE_IMAGE}:${TAG_FREQAI_RL_ARM} -f docker/Dockerfile.freqai_rl . - - name: Tag images for caching - run: | - docker tag freqtrade:$TAG_ARM ${CACHE_IMAGE}:$TAG_ARM - docker tag freqtrade:$TAG_PLOT_ARM ${CACHE_IMAGE}:$TAG_PLOT_ARM - docker tag freqtrade:$TAG_FREQAI_ARM ${CACHE_IMAGE}:$TAG_FREQAI_ARM - docker tag freqtrade:$TAG_FREQAI_RL_ARM ${CACHE_IMAGE}:$TAG_FREQAI_RL_ARM - name: Run backtest in Docker + env: + TAG_ARM: ${{ steps.tags.outputs.TAG_ARM }} run: | - docker run --rm -v $(pwd)/tests/testdata/config.tests.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG_ARM} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3 + docker run --rm -v $(pwd)/tests/testdata/config.tests.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests ${CACHE_IMAGE}:${TAG_ARM} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3 - name: Docker images run: | docker images - name: Push cache images + env: + TAG_PLOT_ARM: ${{ steps.tags.outputs.TAG_PLOT_ARM }} + TAG_FREQAI_ARM: ${{ steps.tags.outputs.TAG_FREQAI_ARM }} + TAG_FREQAI_RL_ARM: ${{ steps.tags.outputs.TAG_FREQAI_RL_ARM }} + TAG_ARM: ${{ steps.tags.outputs.TAG_ARM }} run: | docker push ${CACHE_IMAGE}:$TAG_PLOT_ARM docker push ${CACHE_IMAGE}:$TAG_FREQAI_ARM @@ -195,6 +219,11 @@ jobs: docker push ${CACHE_IMAGE}:$TAG_ARM - name: Create manifests + env: + TAG_PLOT_ARM: ${{ steps.tags.outputs.TAG_PLOT_ARM }} + TAG_FREQAI_ARM: ${{ steps.tags.outputs.TAG_FREQAI_ARM }} + TAG_FREQAI_RL_ARM: ${{ steps.tags.outputs.TAG_FREQAI_RL_ARM }} + TAG_ARM: ${{ steps.tags.outputs.TAG_ARM }} run: | docker buildx imagetools create \ --tag ${IMAGE_NAME}:${TAG} \ @@ -202,6 +231,9 @@ jobs: ${CACHE_IMAGE}:${TAG} ${CACHE_IMAGE}:${TAG_ARM} ${IMAGE_NAME}:${TAG_PI} - name: Create multiarch image - Plot + env: + TAG_PLOT: ${{ steps.tags.outputs.TAG_PLOT }} + TAG_PLOT_ARM: ${{ steps.tags.outputs.TAG_PLOT_ARM }} run: | docker buildx imagetools create \ --tag ${IMAGE_NAME}:${TAG_PLOT} \ @@ -209,6 +241,9 @@ jobs: ${CACHE_IMAGE}:${TAG_PLOT} ${CACHE_IMAGE}:${TAG_PLOT_ARM} - name: Create multiarch image - FreqAI + env: + TAG_FREQAI: ${{ steps.tags.outputs.TAG_FREQAI }} + TAG_FREQAI_ARM: ${{ steps.tags.outputs.TAG_FREQAI_ARM }} run: | docker buildx imagetools create \ --tag ${IMAGE_NAME}:${TAG_FREQAI} \ @@ -216,6 +251,10 @@ jobs: ${CACHE_IMAGE}:${TAG_FREQAI} ${CACHE_IMAGE}:${TAG_FREQAI_ARM} - name: Create multiarch image - FreqAI RL + env: + TAG_FREQAI_RL: ${{ steps.tags.outputs.TAG_FREQAI_RL }} + TAG_FREQAI_RL_ARM: ${{ steps.tags.outputs.TAG_FREQAI_RL_ARM }} + TAG_FREQAI_TORCH: ${{ steps.tags.outputs.TAG_FREQAI_TORCH }} run: | # Create special Torch tag - which is identical to the RL tag. docker buildx imagetools create \ @@ -227,6 +266,8 @@ jobs: - name: Tag latest if: env.TAG == 'develop' + env: + TAG: ${{ steps.tags.outputs.TAG }} run: | # Tag image as latest docker buildx imagetools create \