name: Build and deploy the Vapor documentation concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: push: branches: - main jobs: deploy: name: Build and deploy runs-on: ubuntu-latest permissions: { id-token: write, contents: read } env: { AWS_PAGER: '' } steps: - name: Checkout repository uses: actions/checkout@v4 - name: Create virtual environment run: python3 -m venv venv - name: Install dependencies run: venv/bin/pip install -r requirements.txt - name: Build the website run: | venv/bin/mkdocs build swift fixSearchIndex.swift cp googlefc012e5d94cfa05f.html site/googlefc012e5d94cfa05f.html swift setUpRedirects.swift - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ vars.OIDC_ROLE_ARN }} aws-region: ${{ vars.OIDC_ROLE_REGION }} - name: Deploy CloudFormation stack uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: vapor-docs-stack template: stack.yml no-fail-on-empty-changeset: '1' parameter-overrides: >- DomainName=docs.vapor.codes, S3BucketName=${{ secrets.DOCS_S3_BUCKET_NAME }}, AcmCertificateArn=${{ secrets.CERTIFICATE_ARN }} - name: Upload data to S3 run: | aws s3 sync ./site 's3://${{ secrets.DOCS_S3_BUCKET_NAME }}' --no-progress --acl public-read - name: Invalidate CloudFront run: | aws cloudfront create-invalidation --distribution-id '${{ secrets.DOCS_DISTRIBUTION_ID }}' --paths '/*'