diff --git a/.github/workflows/deploy-docker.yml b/.github/workflows/deploy-docker.yml new file mode 100644 index 0000000..f31bbe8 --- /dev/null +++ b/.github/workflows/deploy-docker.yml @@ -0,0 +1,89 @@ +name: Docker Hub Pipeline + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + npm-install: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'npm' + - name: Cache dependencies + uses: actions/cache@v4 + with: + path: | + .npm/ + node_modules/ + key: ${{ runner.os }}-npm-cache-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-npm-cache- + - name: Install dependencies + run: npm install + + build: + runs-on: ubuntu-latest + env: + VERSION_TAG: ${{ github.ref_name }}-${{ github.sha }} + AUTH0_ENABLED: 'false' + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Cache dependencies + uses: actions/cache/restore@v4 + with: + path: | + .npm/ + node_modules/ + key: ${{ runner.os }}-npm-cache-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-npm-cache- + - name: Build + run: npm run build + - name: Upload dist folder as artifact + uses: actions/upload-artifact@v4 + with: + name: prod-assets + path: dist/ + retention-days: 3 + + build-and-deploy: + runs-on: ubuntu-latest + needs: [build] + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Download dist artifact + uses: actions/download-artifact@v4 + with: + name: prod-assets + path: dist/ + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Log in to Docker Container Registry + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build and push multi-arch Docker image + run: | + docker buildx build \ + --platform linux/amd64,linux/arm64 \ + --tag ${{ vars.DOCKER_IMAGE_NAME }}:latest . \ + --push