EREGCSC-2910 -- [Frontend] Enable sorting search results by new/old #121
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
name: "Deploy Experimental (CDK)" | |
on: | |
pull_request: | |
types: [opened, synchronize, reopened] | |
permissions: | |
id-token: write | |
contents: read | |
actions: read | |
concurrency: ${{ github.workflow }}-${{ github.ref }} | |
jobs: | |
deploy-static-assets: | |
environment: | |
name: "dev" | |
runs-on: ubuntu-22.04 | |
outputs: | |
static_url: ${{ steps.get-static-url.outputs.static_url }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
- name: Deploy Static-Asset Infrastructure | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
run: | | |
pushd cdk-eregs | |
npm install -g aws-cdk@latest @aws-sdk/client-ssm | |
npm install fs-extra | |
npm install --save-dev @types/fs-extra | |
STATICASSET_STACK="cms-eregs-eph-$PR_NUMBER-static-assets" | |
cdk deploy ${STATICASSET_STACK} \ | |
-c environment=${{ env.ENVIRONMENT_NAME }} \ | |
-c deploymentType=infrastructure \ | |
--require-approval never \ | |
--exclusively \ | |
--app "npx ts-node bin/static-assets.ts" \ | |
--outputs-file static-outputs.json | |
popd | |
- name: Get Static URL | |
id: get-static-url | |
run: | | |
pushd cdk-eregs | |
STATIC_STACK="cms-eregs-eph-${{ steps.findPr.outputs.pr }}-static-assets" | |
STATIC_URL=$(cat static-outputs.json | jq -r ".[\"$STATIC_STACK\"].StaticURL") | |
echo "static_url=${STATIC_URL}" >> $GITHUB_OUTPUT | |
popd | |
deploy-zip-lambdas: | |
needs: deploy-static-assets | |
if: github.event.action != 'closed' | |
runs-on: ubuntu-22.04 | |
environment: | |
name: "dev" | |
env: | |
ENVIRONMENT_NAME: "dev" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
- name: Deploy ZIP-based Lambdas | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
CDK_DEBUG: true | |
run: | | |
pushd cdk-eregs | |
npm install -g aws-cdk@latest @aws-sdk/client-ssm | |
npm install | |
# Get exact stack names | |
REDIRECT_STACK="cms-eregs-eph-$PR_NUMBER-redirect-api" | |
MAINTENANCE_STACK="cms-eregs-eph-$PR_NUMBER-maintenance-api" | |
cdk deploy ${REDIRECT_STACK} ${MAINTENANCE_STACK} \ | |
-c environment=${{ env.ENVIRONMENT_NAME }} \ | |
--require-approval never \ | |
--exclusively \ | |
--app "npx ts-node bin/zip-lambdas.ts" | |
popd | |
deploy-vue-assets: | |
environment: | |
name: "dev" | |
runs-on: ubuntu-22.04 | |
needs: [deploy-site-lambdas, deploy-static-assets] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20 | |
- uses: actions/setup-python@v5 | |
if: success() && steps.findPr.outputs.number | |
with: | |
python-version: "3.12" | |
- name: Install Python dependencies | |
run: | | |
mv ./solution/backend/requirements_tmp.txt ./solution/backend/requirements.txt | |
python -m pip install --upgrade pip | |
pip install -r ./solution/static-assets/requirements.txt | |
pip install -r ./solution/backend/requirements.txt | |
- name: Make envfile | |
uses: SpicyPizza/[email protected] | |
with: | |
directory: solution/ui/regulations/eregs-vite | |
file_name: .env | |
- name: Run collectstatic | |
if: success() && steps.findPr.outputs.number | |
env: | |
STATIC_URL: ${{ needs.deploy-static-assets.outputs.static_url }} | |
STATIC_ROOT: ../static-assets/regulations | |
VITE_ENV: eph-${{ steps.findPr.outputs.pr }} | |
run: | | |
pushd solution/backend | |
python manage.py collectstatic --noinput | |
cd .. | |
popd | |
- name: Build Vite assets | |
if: success() && steps.findPr.outputs.number | |
env: | |
STATIC_URL: ${{ needs.deploy-static-assets.outputs.static_url }} | |
STATIC_ROOT: ../static-assets/regulations | |
VITE_ENV: eph-${{ steps.findPr.outputs.pr }} | |
run: | | |
pushd solution | |
make regulations | |
popd | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
- name: Deploy Static Assets | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
run: | | |
pushd cdk-eregs | |
npm install -g aws-cdk@latest @aws-sdk/client-ssm | |
npm install fs-extra | |
npm install --save-dev @types/fs-extra | |
STATICASSET_STACK="cms-eregs-eph-$PR_NUMBER-static-assets" | |
cdk deploy ${STATICASSET_STACK} \ | |
-c environment=${{ env.ENVIRONMENT_NAME }} \ | |
-c deploymentType=content \ | |
--require-approval never \ | |
--exclusively \ | |
--app "npx ts-node bin/static-assets.ts" \ | |
--outputs-file static-outputs.json | |
popd | |
deploy-text-extractor: | |
if: github.event.action != 'closed' | |
runs-on: ubuntu-22.04 | |
environment: | |
name: "dev" | |
env: | |
ENVIRONMENT_NAME: "dev" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
- name: Deploy Text Extractor | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
CDK_DEBUG: true | |
run: | | |
pushd cdk-eregs | |
npm install -g aws-cdk@latest @aws-sdk/client-ssm | |
npm install | |
TEXT_EXTRACTOR_STACK="cms-eregs-eph-$PR_NUMBER-text-extractor" | |
cdk deploy $TEXT_EXTRACTOR_STACK \ | |
-c environment=${{ env.ENVIRONMENT_NAME }} \ | |
--require-approval never \ | |
--exclusively \ | |
--app "npx ts-node bin/text-extractor.ts" | |
popd | |
deploy-fr-parser: | |
needs: [deploy-site-lambdas] | |
if: github.event.action != 'closed' | |
runs-on: ubuntu-22.04 | |
environment: | |
name: "dev" | |
env: | |
ENVIRONMENT_NAME: "dev" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
- name: Deploy FR Parser | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
CDK_DEBUG: true | |
run: | | |
pushd cdk-eregs | |
npm install -g aws-cdk@latest @aws-sdk/client-ssm | |
npm install | |
FR_PARSER_STACK="cms-eregs-eph-$PR_NUMBER-fr-parser" | |
cdk deploy $FR_PARSER_STACK \ | |
-c environment=${{ env.ENVIRONMENT_NAME }} \ | |
--require-approval never \ | |
--exclusively \ | |
--app "npx ts-node bin/docker-lambdas.ts" | |
popd | |
deploy-ecfr-parser: | |
needs: [deploy-site-lambdas] | |
if: github.event.action != 'closed' | |
runs-on: ubuntu-22.04 | |
environment: | |
name: "dev" | |
env: | |
ENVIRONMENT_NAME: "dev" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
- name: Deploy ECFR Parser | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
CDK_DEBUG: true | |
run: | | |
pushd cdk-eregs | |
npm install -g aws-cdk@latest @aws-sdk/client-ssm | |
npm install | |
ECFR_PARSER_STACK="cms-eregs-eph-$PR_NUMBER-ecfr-parser" | |
cdk deploy $ECFR_PARSER_STACK \ | |
-c environment=${{ env.ENVIRONMENT_NAME }} \ | |
--require-approval never \ | |
--exclusively \ | |
--app "npx ts-node bin/docker-lambdas.ts" | |
popd | |
deploy-site-lambdas: | |
needs: [deploy-static-assets, deploy-zip-lambdas, deploy-text-extractor] | |
if: github.event.action != 'closed' | |
runs-on: ubuntu-22.04 | |
environment: | |
name: "dev" | |
outputs: | |
api_url: ${{ steps.get-api-url.outputs.api_url }} | |
env: | |
ENVIRONMENT_NAME: "dev" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
- name: Deploy Site-Lambda | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
CDK_DEBUG: true | |
run: | | |
pushd cdk-eregs | |
npm install -g aws-cdk@latest @aws-sdk/client-ssm | |
npm install | |
API_STACK="cms-eregs-eph-$PR_NUMBER-api" | |
cdk deploy $API_STACK \ | |
-c environment=${{ env.ENVIRONMENT_NAME }} \ | |
-c buildId="${GITHUB_RUN_ID}" \ | |
--require-approval never \ | |
--exclusively \ | |
--app "npx ts-node bin/docker-lambdas.ts" \ | |
--outputs-file api-outputs.json | |
popd | |
- name: Invoke setup functions after site lambdas deployed | |
if: success() && steps.findPr.outputs.number | |
env: | |
PR_NUMBER: ${{ steps.findPr.outputs.pr }} | |
AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} | |
AWS_DEFAULT_REGION: ${{ vars.AWS_DEFAULT_REGION }} | |
CDK_DEBUG: true | |
run: | | |
aws lambda invoke --function-name cms-eregs-eph-$PR_NUMBER-createdb /dev/stdout | tee -a aws.log | |
aws lambda invoke --function-name cms-eregs-eph-$PR_NUMBER-migrate /dev/stdout | tee -a aws.log | |
aws lambda invoke --function-name cms-eregs-eph-$PR_NUMBER-createsu /dev/stdout | tee -a aws.log | |
# Check for invocation errors | |
! grep -q FunctionError aws.log | |
- name: Get API URL | |
id: get-api-url | |
run: | | |
pushd cdk-eregs | |
API_STACK="cms-eregs-eph-${{ steps.findPr.outputs.pr }}-api" | |
API_URL=$(cat api-outputs.json | jq -r ".[\"$API_STACK\"].ApiEndpoint") | |
API_URL=${API_URL%/} | |
# Debug what we're setting | |
echo "Setting API URL: $API_URL" | |
# Use the exact same name as in the outputs section | |
echo "api_url=$(echo $API_URL)" >> $GITHUB_OUTPUT | |
# Verify it was set | |
echo "GITHUB_OUTPUT contents:" | |
cat $GITHUB_OUTPUT | |
popd | |
notify: | |
permissions: | |
pull-requests: write | |
runs-on: ubuntu-22.04 | |
needs: [deploy-site-lambdas, deploy-vue-assets] | |
steps: | |
- name: Find PR number | |
uses: jwalton/gh-find-current-pr@v1 | |
id: findPr | |
with: | |
state: open | |
- name: Debug Job Outputs | |
run: | | |
echo "Debug: PR number: ${{ steps.findPr.outputs.pr }}" | |
echo "Debug: All outputs from previous job:" | |
echo "${{ toJSON(needs.deploy-site-lambdas.outputs) }}" | |
- name: Create deployment comment | |
uses: peter-evans/create-or-update-comment@v2 | |
env: | |
SITE_URL: ${{ needs.deploy-site-lambdas.outputs.api_url }} | |
with: | |
issue-number: ${{ steps.findPr.outputs.pr }} | |
body: | | |
✨ See the CDK Django Site deployed at: ${{ env.SITE_URL }} ✨ | |
reactions: "+1" | |
test-cypress: | |
environment: | |
name: "dev" | |
runs-on: ubuntu-22.04 | |
needs: [deploy-site-lambdas, deploy-vue-assets] | |
steps: | |
# Checkout the code | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: true | |
# Configure AWS credentials for GitHub Actions | |
- name: Configure AWS credentials for GitHub Actions | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: ${{ secrets.AWS_OIDC_ROLE_TO_ASSUME }} | |
aws-region: us-east-1 | |
# Get test user credentials from AWS Parameter Store | |
- name: Get test user credentials | |
uses: dkershner6/aws-ssm-getparameters-action@v2 | |
with: | |
parameterPairs: "/eregulations/http/user = CYPRESS_TEST_USERNAME, | |
/eregulations/http/password = CYPRESS_TEST_PASSWORD, | |
/eregulations/http/reader_user = CYPRESS_READER_USERNAME, | |
/eregulations/http/reader_password = CYPRESS_READER_PASSWORD" | |
withDecryption: "true" # defaults to true | |
# Setup node environment | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20 | |
# Run the cypress tests | |
- name: end-to-end tests | |
uses: cypress-io/github-action@v6 | |
with: | |
working-directory: solution/ui/e2e | |
config: baseUrl=${{ needs.deploy-site-lambdas.outputs.api_url }} | |
env: | |
CYPRESS_DEPLOYING: true | |
- uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: cypress-screenshots | |
path: /home/runner/work/cmcs-eregulations/cmcs-eregulations/solution/ui/e2e/cypress/screenshots/*/* | |
# Test run video was always captured, so this action uses "always()" condition | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: cypress-videos | |
path: /home/runner/work/cmcs-eregulations/cmcs-eregulations/solution/ui/e2e/cypress/videos/* |