Skip to content

EREGCSC-2910 -- [Frontend] Enable sorting search results by new/old #121

EREGCSC-2910 -- [Frontend] Enable sorting search results by new/old

EREGCSC-2910 -- [Frontend] Enable sorting search results by new/old #121

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/*