| |
| |
|
|
| name: CI |
|
|
| on: |
| push: |
| branches: [master, staging] |
| pull_request: |
| |
| |
| |
| branches: [master, feature/*, staging] |
|
|
| |
| concurrency: |
| group: ${{ github.head_ref || github.run_id }} |
| cancel-in-progress: true |
|
|
| jobs: |
| lint-commits: |
| |
| 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 }} |
| |
| |
| |
| 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: |
| |
| 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 |
|
|
| cloudformation-integ: |
| needs: lint-commits |
| name: CloudFormation LSP E2E Tests |
| runs-on: ${{ matrix.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-latest, macos-latest, windows-latest] |
| node-version: [18.x] |
| vscode-version: [stable] |
| 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 }} |
| - name: Setup CloudFormation LSP |
| shell: bash |
| run: bash packages/core/src/testE2E/cloudformation/setup-local-lsp.sh |
| - run: npm ci |
| - name: Run CloudFormation E2E Tests (Unix) |
| if: runner.os != 'Windows' |
| uses: coactions/setup-xvfb@v1 |
| with: |
| run: npm run testE2ECfn -w packages/toolkit |
| - name: Run CloudFormation E2E Tests (Windows) |
| if: runner.os == 'Windows' |
| run: npm run testE2ECfn -w packages/toolkit |
| - name: Print Extension Logs |
| if: failure() |
| shell: bash |
| run: | |
| echo "=== AWS Toolkit Extension Logs ===" |
| find packages/toolkit/.vscode-test/user-data/logs -name "*.log" -type f 2>/dev/null | while read logfile; do |
| echo "--- $logfile ---" |
| cat "$logfile" || echo "Could not read log file" |
| done || echo "No extension logs found" |
| |
| echo "" |
| echo "=== CloudFormation LSP Server Logs ===" |
| echo "LSP Path: $__CLOUDFORMATIONLSP_PATH" |
| if [ -n "$__CLOUDFORMATIONLSP_PATH" ]; then |
| LSP_LOG_DIR="$__CLOUDFORMATIONLSP_PATH/.aws-cfn-storage/logs" |
| echo "Checking directory: $LSP_LOG_DIR" |
| if [ -d "$LSP_LOG_DIR" ]; then |
| find "$LSP_LOG_DIR" -name "*.log" -type f 2>/dev/null | while read logfile; do |
| echo "--- $logfile ---" |
| cat "$logfile" || echo "Could not read log file" |
| done |
| else |
| echo "LSP logs directory does not exist: $LSP_LOG_DIR" |
| echo "Contents of LSP path:" |
| ls -la "$__CLOUDFORMATIONLSP_PATH" 2>/dev/null || echo "Cannot list LSP path" |
| fi |
| else |
| echo "Environment variable __CLOUDFORMATIONLSP_PATH is not set" |
| fi |
|
|
| 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: |
| |
| 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 }} |
|
|