diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac0d50fd..5c809404 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,9 +1,72 @@ -on: [push] +on: + push: + tags: + - "*.*.*" name: Build and Release jobs: + build: + runs-on: ubuntu-latest + + outputs: + tag: ${{ steps.current_tag.outputs.tag }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install NodeJS + uses: actions/setup-node@v4 + with: + node-version: 20.x + registry-url: https://registry.npmjs.org + + - name: Verify versions + run: node --version && npm --version && node -p process.versions.v8 + + - name: Cache build context + id: cache-node + uses: actions/cache@v3 + with: + path: | + ~/.npm + node_modules + key: ${{ runner.os }}-${{ runner.arch }}-node + + - name: Get current tag + id: current_tag + uses: WyriHaximus/github-action-get-previous-tag@v1 + with: + fallback: 0.0.0 + + - name: Install dependencies + run: npm install --no-audit + + - name: Run build + run: npm run build + + - name: Archive output files + run: tar -zcvf ./release-${{ steps.current_tag.outputs.tag }}.tar.gz dist/ + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.current_tag.outputs.tag }} Release + path: ./release-${{ steps.current_tag.outputs.tag }}.tar.gz + retention-days: 30 + + - name: Release new version + uses: softprops/action-gh-release@v1 + with: + name: ${{ steps.current_tag.outputs.tag }} + body: "⚠️ Changelog not yet provided." + files: ./release-${{ steps.current_tag.outputs.tag }}.tar.gz + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ship: + needs: build runs-on: ubuntu-latest permissions: @@ -28,18 +91,38 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Download build artifacts - uses: dawidd6/action-download-artifact@v6 + uses: actions/download-artifact@v4 with: - name: 0.5.3 Release - workflow: build.yml - search_artifacts: true + name: ${{ needs.build.outputs.tag }} Release - name: Extract build artifacts - run: tar -xzvf ./release-0.5.3.tar.gz + run: tar -xzvf ./release-${{ needs.build.outputs.tag }}.tar.gz - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . push: true - tags: ${{ env.REGISTRY }}/${{ github.repository }}:0.5.3 + tags: ${{ env.REGISTRY }}/${{ github.repository }}:${{ needs.build.outputs.tag }} + + deploy: + needs: build + environment: app.prose.org + runs-on: ubuntu-latest + + steps: + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: ${{ needs.build.outputs.tag }} Release + + - name: Extract build artifacts + run: tar -xzvf ./release-${{ needs.build.outputs.tag }}.tar.gz + + - name: Deploy application + env: + AWS_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} + AWS_EC2_METADATA_DISABLED: true + run: | + aws s3 sync --delete --endpoint-url ${{ vars.S3_ENDPOINT }} dist/ s3://${{ vars.S3_BUCKET }}/${{ vars.S3_SITE_DOMAIN }}/