pullpreview_helm #56
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: pullpreview_helm | |
| on: | |
| schedule: | |
| - cron: "15 4 * * *" | |
| pull_request: | |
| types: [labeled, unlabeled, synchronize, closed, reopened, opened] | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| jobs: | |
| deploy_smoke_1: | |
| runs-on: ubuntu-slim | |
| if: >- | |
| github.event_name == 'schedule' || | |
| github.event.label.name == 'pullpreview-helm' || | |
| ((github.event.action == 'opened' || | |
| github.event.action == 'reopened' || | |
| github.event.action == 'synchronize' || | |
| github.event.action == 'closed') && | |
| contains(github.event.pull_request.labels.*.name, 'pullpreview-helm')) | |
| outputs: | |
| live: ${{ steps.pullpreview.outputs.live }} | |
| timeout-minutes: 40 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Deploy Helm smoke app (v1) | |
| id: pullpreview | |
| uses: "./" | |
| with: | |
| label: pullpreview-helm | |
| admins: "@collaborators/push" | |
| app_path: . | |
| provider: hetzner | |
| region: ash | |
| image: ubuntu-24.04 | |
| dns: rev2.click | |
| instance_type: cpx21 | |
| max_domain_length: 40 | |
| deployment_target: helm | |
| chart: wordpress | |
| chart_repository: https://charts.bitnami.com/bitnami | |
| chart_set: service.type=ClusterIP | |
| proxy_tls: '{{ release_name }}-wordpress:80' | |
| ttl: 1h | |
| env: | |
| HCLOUD_TOKEN: "${{ secrets.HCLOUD_TOKEN }}" | |
| HETZNER_CA_KEY: "${{ secrets.HETZNER_CA_KEY }}" | |
| - name: Assert deploy v1 | |
| if: steps.pullpreview.outputs.live == 'true' | |
| shell: bash | |
| env: | |
| PREVIEW_URL: ${{ steps.pullpreview.outputs.url }} | |
| run: | | |
| set -euo pipefail | |
| if [[ "${PREVIEW_URL}" != https://* ]]; then | |
| echo "::error::Expected https preview URL when proxy_tls is enabled, got ${PREVIEW_URL}" | |
| exit 1 | |
| fi | |
| status_code="" | |
| body="" | |
| for attempt in $(seq 1 60); do | |
| status_code="$(curl -fsSIL -o /dev/null -w '%{http_code}' --max-time 20 "${PREVIEW_URL}" || true)" | |
| body="$(curl -fsSL --max-time 20 "${PREVIEW_URL}" || true)" | |
| if [[ "${status_code}" == "200" ]] && \ | |
| grep -Eqi 'wp-content|wp-includes|User's Blog' <<<"${body}"; then | |
| echo "Helm smoke v1 checks passed for ${PREVIEW_URL}" | |
| exit 0 | |
| fi | |
| echo "Attempt ${attempt}/60: waiting for Helm v1 response from ${PREVIEW_URL} (http_status=${status_code:-n/a})" | |
| sleep 5 | |
| done | |
| echo "::error::Unexpected Helm response from ${PREVIEW_URL}" | |
| printf '%s\n' "${body}" | |
| exit 1 | |
| deploy_smoke_2: | |
| runs-on: ubuntu-slim | |
| needs: deploy_smoke_1 | |
| if: needs.deploy_smoke_1.result == 'success' && needs.deploy_smoke_1.outputs.live == 'true' | |
| timeout-minutes: 40 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Redeploy Helm smoke app (v2) | |
| id: pullpreview | |
| uses: "./" | |
| with: | |
| label: pullpreview-helm | |
| admins: "@collaborators/push" | |
| app_path: . | |
| provider: hetzner | |
| region: ash | |
| image: ubuntu-24.04 | |
| dns: rev2.click | |
| instance_type: cpx21 | |
| max_domain_length: 40 | |
| deployment_target: helm | |
| chart: wordpress | |
| chart_repository: https://charts.bitnami.com/bitnami | |
| chart_set: service.type=ClusterIP | |
| proxy_tls: '{{ release_name }}-wordpress:80' | |
| ttl: 1h | |
| env: | |
| HCLOUD_TOKEN: "${{ secrets.HCLOUD_TOKEN }}" | |
| HETZNER_CA_KEY: "${{ secrets.HETZNER_CA_KEY }}" | |
| - name: Assert deploy v2 | |
| if: steps.pullpreview.outputs.live == 'true' | |
| shell: bash | |
| env: | |
| PREVIEW_URL: ${{ steps.pullpreview.outputs.url }} | |
| run: | | |
| set -euo pipefail | |
| if [[ "${PREVIEW_URL}" != https://* ]]; then | |
| echo "::error::Expected https preview URL when proxy_tls is enabled, got ${PREVIEW_URL}" | |
| exit 1 | |
| fi | |
| status_code="" | |
| body="" | |
| for attempt in $(seq 1 60); do | |
| status_code="$(curl -fsSIL -o /dev/null -w '%{http_code}' --max-time 20 "${PREVIEW_URL}" || true)" | |
| body="$(curl -fsSL --max-time 20 "${PREVIEW_URL}" || true)" | |
| if [[ "${status_code}" == "200" ]] && \ | |
| grep -Eqi 'wp-content|wp-includes|User's Blog' <<<"${body}"; then | |
| echo "Helm smoke v2 checks passed for ${PREVIEW_URL}" | |
| exit 0 | |
| fi | |
| echo "Attempt ${attempt}/60: waiting for Helm v2 response from ${PREVIEW_URL} (http_status=${status_code:-n/a})" | |
| sleep 5 | |
| done | |
| echo "::error::Unexpected Helm response from ${PREVIEW_URL}" | |
| printf '%s\n' "${body}" | |
| exit 1 |