diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c8d780758d..6c42929c27 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -172,93 +172,3 @@ jobs: with: name: coverage path: coverage - - build-skip-check: - runs-on: ubuntu-22.04 - outputs: - skip: ${{ steps.skip-check.outputs.skip }} - steps: - - name: Skip? - id: skip-check - run: | - if [[ "${{ vars.DOCKER_USER }}" == '' ]]; then - echo 'Docker user is empty. Skipping build+push' - echo skip=true >> "$GITHUB_OUTPUT" - elif [[ "${{ secrets.DOCKER_PASS }}" == '' ]]; then - echo 'Docker password is empty. Skipping build+push' - echo skip=true >> "$GITHUB_OUTPUT" - elif [[ "${{ github.ref_name }}" != 'master' ]]; then - echo 'Ref name is not `master`. Skipping build+push' - echo skip=true >> "$GITHUB_OUTPUT" - else - echo 'Docker user and password are set and branch is `master`.' - echo 'Building + pushing `preview` image.' - echo skip=false >> "$GITHUB_OUTPUT" - fi - - build-docker-image: - runs-on: ubuntu-22.04 - needs: - - backend-unit-tests - - frontend-unit-tests - - frontend-e2e-tests - - build-skip-check - if: needs.build-skip-check.outputs.skip == 'false' - steps: - - if: github.event.pull_request.mergeable == 'false' - name: Exit if PR is not mergeable - run: exit 1 - - uses: actions/checkout@v4 - with: - fetch-depth: 1 - ref: ${{ github.event.pull_request.head.sha }} - - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODE_VERSION }} - cache: 'yarn' - - name: Install Dependencies - run: | - npm install --global --force yarn@1.22.19 - yarn cache clean && yarn --frozen-lockfile --network-concurrency 1 - - - name: Set up QEMU - timeout-minutes: 1 - uses: docker/setup-qemu-action@v2.2.0 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: ${{ vars.DOCKER_USER }} - password: ${{ secrets.DOCKER_PASS }} - - - name: Bump version - id: version - run: | - set -x - .ci/update_version - VERSION=$(jq -r .version package.json) - VERSION_TAG="${VERSION}.b${GITHUB_RUN_ID}.${GITHUB_RUN_NUMBER}" - echo "VERSION_TAG=$VERSION_TAG" >> "$GITHUB_OUTPUT" - - - name: Build and push preview image to Docker Hub - uses: docker/build-push-action@v4 - with: - push: true - tags: | - redash/redash:preview - redash/preview:${{ steps.version.outputs.VERSION_TAG }} - context: . - build-args: | - test_all_deps=true - cache-from: type=gha - cache-to: type=gha,mode=max - platforms: linux/amd64 - env: - DOCKER_CONTENT_TRUST: true - - - name: "Failure: output container logs to console" - if: failure() - run: docker compose logs diff --git a/.github/workflows/preview-image.yml b/.github/workflows/preview-image.yml new file mode 100644 index 0000000000..eaefc793bc --- /dev/null +++ b/.github/workflows/preview-image.yml @@ -0,0 +1,87 @@ +name: Preview Image +on: + push: + tags: + - '*-dev' + +env: + NODE_VERSION: 18 + +jobs: + build-skip-check: + runs-on: ubuntu-22.04 + outputs: + skip: ${{ steps.skip-check.outputs.skip }} + steps: + - name: Skip? + id: skip-check + run: | + if [[ "${{ vars.DOCKER_USER }}" == '' ]]; then + echo 'Docker user is empty. Skipping build+push' + echo skip=true >> "$GITHUB_OUTPUT" + elif [[ "${{ secrets.DOCKER_PASS }}" == '' ]]; then + echo 'Docker password is empty. Skipping build+push' + echo skip=true >> "$GITHUB_OUTPUT" + else + echo 'Docker user and password are set and branch is `master`.' + echo 'Building + pushing `preview` image.' + echo skip=false >> "$GITHUB_OUTPUT" + fi + + build-docker-image: + runs-on: ubuntu-22.04 + needs: + - build-skip-check + if: needs.build-skip-check.outputs.skip == 'false' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 1 + ref: ${{ github.event.push.after }} + + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'yarn' + + - name: Install Dependencies + run: | + npm install --global --force yarn@1.22.19 + yarn cache clean && yarn --frozen-lockfile --network-concurrency 1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ vars.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASS }} + + - name: Set version + id: version + run: | + set -x + .ci/update_version + VERSION_TAG=$(jq -r .version package.json) + echo "VERSION_TAG=$VERSION_TAG" >> "$GITHUB_OUTPUT" + + - name: Build and push preview image to Docker Hub + uses: docker/build-push-action@v4 + with: + push: true + tags: | + ${{ github.repository_owner }}/redash:preview + ${{ github.repository_owner }}/preview:${{ steps.version.outputs.VERSION_TAG }} + context: . + build-args: | + test_all_deps=true + cache-from: type=gha + cache-to: type=gha,mode=max + platforms: linux/amd64 + env: + DOCKER_CONTENT_TRUST: true + + - name: "Failure: output container logs to console" + if: failure() + run: docker compose logs