89 lines
3.8 KiB
YAML
89 lines
3.8 KiB
YAML
|
# Manual deploy workflow for deploying to app.element.io & staging.element.io
|
||
|
# Runs automatically for staging.element.io when an RC or Release is published
|
||
|
# Note: Does *NOT* run automatically for app.element.io so that it gets tested on staging.element.io beforehand
|
||
|
name: Build and Deploy ${{ inputs.site || 'staging.element.io' }}
|
||
|
on:
|
||
|
release:
|
||
|
types: [published]
|
||
|
workflow_dispatch:
|
||
|
inputs:
|
||
|
site:
|
||
|
description: Which site to deploy to
|
||
|
required: true
|
||
|
default: staging.element.io
|
||
|
type: choice
|
||
|
options:
|
||
|
- staging.element.io
|
||
|
- app.element.io
|
||
|
concurrency: ${{ inputs.site || 'staging.element.io' }}
|
||
|
permissions: {}
|
||
|
jobs:
|
||
|
deploy:
|
||
|
name: "Deploy to Cloudflare Pages"
|
||
|
runs-on: ubuntu-24.04
|
||
|
environment: ${{ inputs.site || 'staging.element.io' }}
|
||
|
permissions:
|
||
|
checks: read
|
||
|
deployments: write
|
||
|
env:
|
||
|
SITE: ${{ inputs.site || 'staging.element.io' }}
|
||
|
steps:
|
||
|
- name: Load GPG key
|
||
|
run: |
|
||
|
curl https://packages.element.io/element-release-key.gpg | gpg --import
|
||
|
gpg -k "$GPG_FINGERPRINT"
|
||
|
env:
|
||
|
GPG_FINGERPRINT: ${{ secrets.GPG_FINGERPRINT }}
|
||
|
|
||
|
- name: Check current version on deployment
|
||
|
id: current_version
|
||
|
run: |
|
||
|
echo "version=$(curl -s https://$SITE/version)" >> $GITHUB_OUTPUT
|
||
|
|
||
|
# The current version bundle melding dance is skipped if the version we're deploying is the same
|
||
|
# as then we're just doing a re-deploy of the same version with potentially different configs.
|
||
|
- name: Download current version for its old bundles
|
||
|
id: current_download
|
||
|
if: steps.current_version.outputs.version != github.ref_name
|
||
|
uses: element-hq/element-web/.github/actions/download-verify-element-tarball@${{ github.ref_name }}
|
||
|
with:
|
||
|
tag: steps.current_version.outputs.version
|
||
|
out-file-path: current_version
|
||
|
|
||
|
- name: Download target version
|
||
|
uses: element-hq/element-web/.github/actions/download-verify-element-tarball@${{ github.ref_name }}
|
||
|
with:
|
||
|
tag: ${{ github.ref_name }}
|
||
|
out-file-path: _deploy
|
||
|
|
||
|
- name: Merge current bundles into target
|
||
|
if: steps.current_download.outcome == 'success'
|
||
|
run: cp -vnpr current_version/bundles/* _deploy/bundles/
|
||
|
|
||
|
- name: Copy config
|
||
|
run: cp element.io/app/config.json _deploy/config.json
|
||
|
|
||
|
- name: Populate 404.html
|
||
|
run: echo "404 Not Found" > _deploy/404.html
|
||
|
|
||
|
- name: Populate _headers
|
||
|
run: cp .github/cfp_headers _deploy/_headers
|
||
|
|
||
|
- name: Wait for other steps to succeed
|
||
|
uses: t3chguy/wait-on-check-action@18541021811b56544d90e0f073401c2b99e249d6 # fork
|
||
|
with:
|
||
|
ref: ${{ github.sha }}
|
||
|
running-workflow-name: "Build and Deploy ${{ env.SITE }}"
|
||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||
|
wait-interval: 10
|
||
|
check-regexp: ^((?!SonarCloud|SonarQube|issue|board|label|Release|prepare|GitHub Pages).)*$
|
||
|
|
||
|
- name: Deploy to Cloudflare Pages
|
||
|
uses: cloudflare/pages-action@f0a1cd58cd66095dee69bfa18fa5efd1dde93bca # v1
|
||
|
with:
|
||
|
apiToken: ${{ secrets.CF_PAGES_TOKEN }}
|
||
|
accountId: ${{ secrets.CF_PAGES_ACCOUNT_ID }}
|
||
|
projectName: ${{ env.SITE == 'staging.element.io' && 'element-web-staging' || 'element-web' }}
|
||
|
directory: _deploy
|
||
|
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
|