Merge pull request #11 from CodeWithAsheville/8-implementation #7
This file contains hidden or 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 | |
| on: | |
| push: | |
| branches: [main, live] | |
| jobs: | |
| determine-environment: | |
| name: Determine Environment | |
| runs-on: ubuntu-latest | |
| outputs: | |
| environment_name: ${{ steps.set-env.outputs.environment_name }} | |
| steps: | |
| - id: set-env | |
| run: | | |
| if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then | |
| echo "environment_name=dev" >> $GITHUB_OUTPUT | |
| elif [[ "${{ github.ref }}" == "refs/heads/live" ]]; then | |
| echo "environment_name=prod" >> $GITHUB_OUTPUT | |
| fi | |
| verify-ssm-parameters: | |
| name: Verify SSM Parameters | |
| needs: determine-environment | |
| uses: ./.github/workflows/verify-ssm-parameters.yml | |
| with: | |
| environment: ${{ needs.determine-environment.outputs.environment_name }} | |
| secrets: inherit | |
| terraform-apply: | |
| name: Terraform Apply | |
| runs-on: ubuntu-latest | |
| needs: [determine-environment, verify-ssm-parameters] | |
| defaults: | |
| run: | |
| working-directory: ./infra/terraform | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Terraform | |
| uses: hashicorp/setup-terraform@v3 | |
| with: | |
| terraform_version: "1.11.4" | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-access-key-id: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_ACCESS_KEY_ID || secrets.PROD_AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_SECRET_ACCESS_KEY || secrets.PROD_AWS_SECRET_ACCESS_KEY }} | |
| aws-region: us-east-2 | |
| - name: Set Terraform environment variables | |
| run: | | |
| echo "TF_VAR_alert_email=${{ vars.ALERT_EMAIL }}" >> $GITHUB_ENV | |
| - name: Terraform Init | |
| working-directory: ./infra/terraform/${{ needs.determine-environment.outputs.environment_name }} | |
| run: terraform init | |
| - name: Terraform Apply | |
| working-directory: ./infra/terraform/${{ needs.determine-environment.outputs.environment_name }} | |
| run: | | |
| terraform apply -auto-approve | |
| deploy-backend: | |
| name: Deploy Backend API | |
| runs-on: ubuntu-latest | |
| needs: [determine-environment, terraform-apply] | |
| defaults: | |
| run: | |
| working-directory: ./serverless | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Configure AWS credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| aws-access-key-id: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_ACCESS_KEY_ID || secrets.PROD_AWS_ACCESS_KEY_ID }} | |
| aws-secret-access-key: ${{ needs.determine-environment.outputs.environment_name == 'dev' && secrets.DEV_AWS_SECRET_ACCESS_KEY || secrets.PROD_AWS_SECRET_ACCESS_KEY }} | |
| aws-region: us-east-2 | |
| - name: Use Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| cache: "npm" | |
| cache-dependency-path: "./serverless/package-lock.json" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Run tests before deployment | |
| run: npm test | |
| - name: Run linting | |
| run: npm run lint | |
| - name: Install serverless framework | |
| run: npm install -g serverless | |
| - name: Deploy API with serverless | |
| env: | |
| SERVERLESS_ACCESS_KEY: ${{ secrets.SERVERLESS_ACCESS_KEY }} | |
| run: | | |
| cd api | |
| serverless deploy --stage ${{ needs.determine-environment.outputs.environment_name }} | |
| create-release: | |
| name: Create Release | |
| runs-on: ubuntu-latest | |
| if: github.ref == 'refs/heads/live' | |
| needs: [deploy-backend] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get version | |
| id: get-version | |
| run: | | |
| CURRENT_DATE=$(date +'%Y.%m.%d') | |
| RELEASE_COUNT=$(git tag -l "v$CURRENT_DATE.*" | wc -l) | |
| RELEASE_VERSION="v$CURRENT_DATE.$((RELEASE_COUNT + 1))" | |
| echo "version=$RELEASE_VERSION" >> $GITHUB_OUTPUT | |
| - name: Create Release | |
| uses: ncipollo/release-action@v1 | |
| with: | |
| tag: ${{ steps.get-version.outputs.version }} | |
| name: Release ${{ steps.get-version.outputs.version }} | |
| generateReleaseNotes: true |