Deploy PRODUCTION instance #211
Workflow file for this run
This file contains 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
on: | |
workflow_dispatch: | |
inputs: | |
check_config: | |
type: boolean | |
description: 'Fail when configuration overridden' | |
required: true | |
default: true | |
sql_backup: | |
type: boolean | |
description: 'Create SQL backup' | |
required: true | |
default: true | |
enable_maintenance_mode: | |
type: boolean | |
description: 'Enable maintenance mode.' | |
required: true | |
default: true | |
name: 'Deploy PRODUCTION instance' | |
jobs: | |
create_release_archive: | |
name: 'Create release archive' | |
runs-on: | |
labels: 'drupal-runner-v2' | |
outputs: | |
release_filename: ${{ steps.artifact.outputs.filename }} | |
steps: | |
- name: Fail if a branch was selected | |
if: github.event_name == 'workflow_dispatch' && !startsWith(github.ref, 'refs/tags/') | |
run: | | |
echo "This workflow should not be triggered with workflow_dispatch on a branch. Please choose a tag." | |
exit 1 | |
- name: 'Checkout source code' | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: 'Setup nodejs' | |
uses: actions/setup-node@v3 | |
with: | |
node-version-file: 'web/themes/custom/parc/.nvmrc' | |
- name: 'Install dependencies' | |
uses: eaudeweb/[email protected] | |
with: | |
dev: false | |
php: /usr/bin/php8.2 | |
- name: 'Create release archive' | |
id: artifact | |
uses: eaudeweb/[email protected] | |
deploy_release: | |
name: 'Deploy release on the server' | |
runs-on: | |
labels: 'drupal-runner-v2' | |
needs: create_release_archive | |
steps: | |
- name: 'Deploy release on the server' | |
uses: eaudeweb/[email protected] | |
with: | |
ssh_user: ${{ secrets.PROD_SSH_USER }} | |
ssh_host: ${{ secrets.PROD_SSH_HOST }} | |
ssh_key: ${{ secrets.PROD_SSH_KEY }} | |
release_id: 'release-${{ github.ref_name }}' | |
release_filename: ${{ needs.create_release_archive.outputs.release_filename }} | |
project_dir: /var/www/html/eu-parc.eu | |
artifacts_dir: /var/www/artifacts/eu-parc.eu | |
settings_file: /var/www/config/eu-parc.eu/settings.local.php | |
public_files_dir: /var/www/config/eu-parc.eu/files | |
robo_file: /var/www/config/eu-parc.eu/robo.yml | |
database_dump_dir: /var/www/config/eu-parc.eu/sync | |
artifacts_lifespan: 30 | |
check_config: ${{ inputs.check_config }} | |
sql_backup: ${{ inputs.sql_backup }} | |
update_instance: | |
name: 'Update Drupal instance' | |
runs-on: | |
labels: 'drupal-runner-v2' | |
needs: deploy_release | |
steps: | |
- name: 'Update the Drupal instance' | |
id: release | |
uses: eaudeweb/[email protected] | |
with: | |
path: /var/www/html/eu-parc.eu | |
enable_maintenance_mode: ${{ inputs.enable_maintenance_mode }} | |
- name: 'Discord notification' | |
run: > | |
curl -X POST -F "content=:white_check_mark: **${{ github.repository }}** release **${{ github.ref_name }}** | |
has been deployed on PROD: <https://eu-parc.eu>." ${{ secrets.DISCORD_WEBHOOK }} | |
notify_failure: | |
name: 'Notify on failure' | |
runs-on: | |
labels: 'drupal-runner-v2' | |
needs: [create_release_archive, deploy_release, update_instance] | |
if: failure() | |
steps: | |
- name: 'Discord notification on failed deploy' | |
run: > | |
curl -X POST -F | |
"content=:octagonal_sign: **${{ github.repository }}** failed to deploy release **${{ github.ref_name }}** on PROD: <https://eu-parc.eu>. | |
<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>" | |
${{ secrets.DISCORD_WEBHOOK }} |