Skip to content

feat(cloudformation): Update CloudFormation feature with latest changes #24357

feat(cloudformation): Update CloudFormation feature with latest changes

feat(cloudformation): Update CloudFormation feature with latest changes #24357

Workflow file for this run

# github actions: https://docs.github.com/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-nodejs
# setup-node: https://github.com/actions/setup-node
name: CI
on:
push:
branches: [master, staging]
pull_request:
# By default, CI will trigger on opened/synchronize/reopened event types.
# https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#pull_request
# Note: To re-run `lint-commits` after fixing the PR title, close-and-reopen the PR.
branches: [master, feature/*, staging]
# Cancel old jobs when a pull request is updated.
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
lint-commits:
# Note: To re-run `lint-commits` after fixing the PR title, close-and-reopen the PR.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 20
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Validate Branch name
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref != ''}}
env:
BRANCH_NAME: ${{ github.event.pull_request.head.ref }}
run: |
node "$GITHUB_WORKSPACE/.github/workflows/lintbranch.js" run "$BRANCH_NAME"
- name: Check PR title
run: |
node "$GITHUB_WORKSPACE/.github/workflows/lintcommit.js"
lint:
needs: lint-commits
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
vscode-version: [stable]
env:
NODE_OPTIONS: '--max-old-space-size=8192'
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run testCompile
- run: npm run lint
lint-duplicate-code:
needs: lint-commits
if: ${{ github.event_name == 'pull_request'}}
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]
env:
NODE_OPTIONS: '--max-old-space-size=8192'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Fetch fork upstream
env:
REPO_NAME: ${{ github.event.pull_request.head.repo.full_name }}
run: |
git remote add forkUpstream https://github.com/$REPO_NAME # URL of the fork
git fetch forkUpstream # Fetch fork
- name: Merge in target branch to avoid false negatives.
env:
TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
# Note: "git merge" should always succeed here, because GHA won't
# start the job if there are merge conflicts. https://github.com/orgs/community/discussions/11265
# Also, because `git merge` makes a commit, we need to establish an identity to avoid 'Committer identity unknown' error
run: |
git config --global user.name "aws-toolkit-automation"
git config --global user.email "<>"
git merge origin/$TARGET_BRANCH
- name: Compute git diff
env:
CURRENT_BRANCH: ${{ github.head_ref }}
TARGET_BRANCH: ${{ github.event.pull_request.base.ref }}
run: git diff origin/$TARGET_BRANCH forkUpstream/$CURRENT_BRANCH > diff_output.txt
- run: npm install -g jscpd
- run: jscpd --config "$GITHUB_WORKSPACE/.github/workflows/jscpd.json"
- if: always()
uses: actions/upload-artifact@v4
with:
name: unfiltered-jscpd-report
path: ./jscpd-report.json
- name: Check for Duplicates
env:
COMMIT_HASH: ${{ github.sha}}
REPO_NAME: ${{ github.repository }}
run: node "$GITHUB_WORKSPACE/.github/workflows/filterDuplicates.js" run diff_output.txt jscpd-report.json $COMMIT_HASH $REPO_NAME
macos:
needs: lint-commits
name: test macOS
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
node-version: [18.x]
vscode-version: [minimum, stable, insiders]
package: [amazonq, toolkit]
env:
VSCODE_TEST_VERSION: ${{ matrix.vscode-version }}
NODE_OPTIONS: '--max-old-space-size=8192'
AWS_TOOLKIT_TEST_CACHE_DIR: '/tmp/.vscode-test/'
AWS_TOOLKIT_TEST_USER_DIR: '/tmp/.vscode-test/user-data/'
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- name: Tests
uses: coactions/setup-xvfb@v1
with:
run: npm run test -w packages/${{ matrix.package }}
- name: Code coverage for ${{ matrix.package }}
env:
# Unset NODE_OPTIONS because of https://github.com/codecov/uploader/issues/475
NODE_OPTIONS: ''
if: ${{ github.repository == 'aws/aws-toolkit-vscode' && github.event_name == 'pull_request' && github.base_ref == 'master' }}
uses: codecov/codecov-action@v5
with:
flags: macos-${{ matrix.package }}-unittests
verbose: true
file: ./coverage/${{ matrix.package }}/lcov.info
token: ${{ secrets.CODECOV_TOKEN }}
web:
needs: lint-commits
name: test Web
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
node-version: [18.x]
vscode-version: [stable, insiders]
env:
VSCODE_TEST_VERSION: ${{ matrix.vscode-version }}
NODE_OPTIONS: '--max-old-space-size=8192'
AWS_TOOLKIT_TEST_CACHE_DIR: '/tmp/.vscode-test/'
AWS_TOOLKIT_TEST_USER_DIR: '/tmp/.vscode-test/user-data/'
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- name: Tests
uses: coactions/setup-xvfb@v1
with:
run: npm run testWeb
windows:
needs: lint-commits
name: test Windows
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
node-version: [18.x]
vscode-version: [stable, insiders]
package: [amazonq, toolkit]
env:
VSCODE_TEST_VERSION: ${{ matrix.vscode-version }}
NODE_OPTIONS: '--max-old-space-size=8192'
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- name: Tests
run: npm run test -w packages/${{ matrix.package }}
- name: Code coverage for ${{ matrix.package }}
env:
# Unset NODE_OPTIONS because of https://github.com/codecov/uploader/issues/475
NODE_OPTIONS: ''
if: ${{ github.repository == 'aws/aws-toolkit-vscode' && github.event_name == 'pull_request' && github.base_ref == 'master' }}
uses: codecov/codecov-action@v5
with:
flags: windows-${{ matrix.package }}-unittests
verbose: true
file: ./coverage/${{ matrix.package }}/lcov.info
token: ${{ secrets.CODECOV_TOKEN }}
cfn-integ-test-macos:
needs: lint-commits
name: CloudFormation E2E Test (macOS)
runs-on: macos-latest
env:
VSCODE_TEST_VERSION: stable
NODE_OPTIONS: '--max-old-space-size=8192'
AWS_TOOLKIT_TEST_CACHE_DIR: '/tmp/.vscode-test/'
AWS_TOOLKIT_TEST_USER_DIR: '/tmp/.vscode-test/user-data/'
steps:
- uses: actions/checkout@v4
- name: Use Node.js 18.x
uses: actions/setup-node@v4
with:
node-version: 18.x
- name: Setup CloudFormation LSP Server
run: |
bash packages/core/src/testE2E/cloudformation/setup-local-lsp.sh
REPO_ROOT=$(pwd)
LSP_FILE=$(find "$REPO_ROOT/.lsp-server" -name "cfn-lsp-server-standalone.js" 2>/dev/null | head -1)
if [ -z "$LSP_FILE" ]; then
echo "Error: cfn-lsp-server-standalone.js not found"
echo "Contents of $REPO_ROOT/.lsp-server:"
ls -la "$REPO_ROOT/.lsp-server" || echo ".lsp-server directory not found"
exit 1
fi
LSP_DIR=$(dirname "$LSP_FILE")
echo "Setting __CLOUDFORMATIONLSP_PATH=$LSP_DIR"
echo "__CLOUDFORMATIONLSP_PATH=$LSP_DIR" >> $GITHUB_ENV
- run: npm ci
- name: CloudFormation E2E Tests
uses: coactions/setup-xvfb@v1
with:
run: npm run testE2ECfn -w packages/toolkit
cfn-integ-test-ubuntu:
needs: cfn-integ-test-macos
name: CloudFormation E2E Test (Ubuntu)
runs-on: ubuntu-latest
env:
VSCODE_TEST_VERSION: stable
NODE_OPTIONS: '--max-old-space-size=8192'
AWS_TOOLKIT_TEST_CACHE_DIR: '/tmp/.vscode-test/'
AWS_TOOLKIT_TEST_USER_DIR: '/tmp/.vscode-test/user-data/'
steps:
- uses: actions/checkout@v4
- name: Use Node.js 18.x
uses: actions/setup-node@v4
with:
node-version: 18.x
- name: Setup CloudFormation LSP Server
run: |
bash packages/core/src/testE2E/cloudformation/setup-local-lsp.sh
REPO_ROOT=$(pwd)
LSP_FILE=$(find "$REPO_ROOT/.lsp-server" -name "cfn-lsp-server-standalone.js" 2>/dev/null | head -1)
if [ -z "$LSP_FILE" ]; then
echo "Error: cfn-lsp-server-standalone.js not found"
echo "Contents of $REPO_ROOT/.lsp-server:"
ls -la "$REPO_ROOT/.lsp-server" || echo ".lsp-server directory not found"
exit 1
fi
LSP_DIR=$(dirname "$LSP_FILE")
echo "Setting __CLOUDFORMATIONLSP_PATH=$LSP_DIR"
echo "__CLOUDFORMATIONLSP_PATH=$LSP_DIR" >> $GITHUB_ENV
- run: npm ci
- name: CloudFormation E2E Tests
uses: coactions/setup-xvfb@v1
with:
run: npm run testE2ECfn -w packages/toolkit