name: Build Extension on: workflow_dispatch: pull_request: types: [opened, synchronize, reopened, ready_for_review] push: branches: - main jobs: build: name: Build runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 1 - uses: actions/setup-node@v3 with: node-version: '16.14.2' cache: 'npm' cache-dependency-path: extensions/ql-vscode/package-lock.json - name: Install dependencies working-directory: extensions/ql-vscode run: | npm ci shell: bash - name: Build working-directory: extensions/ql-vscode env: APP_INSIGHTS_KEY: '${{ secrets.APP_INSIGHTS_KEY }}' run: | npm run build shell: bash - name: Prepare artifacts if: matrix.os == 'ubuntu-latest' run: | mkdir artifacts cp dist/*.vsix artifacts - name: Upload artifacts uses: actions/upload-artifact@v3 if: matrix.os == 'ubuntu-latest' with: name: vscode-codeql-extension path: artifacts find-nightly: name: Find Nightly Release runs-on: ubuntu-latest outputs: url: ${{ steps.get-url.outputs.nightly-url }} steps: - name: Get Nightly Release URL id: get-url env: GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' shell: bash # This workflow step gets an unstable testing version of the CodeQL CLI. It should not be used outside of these tests. run: | LATEST=`gh api repos/dsp-testing/codeql-cli-nightlies/releases --jq '.[].tag_name' --method GET --raw-field 'per_page=1'` echo "nightly-url=https://github.com/dsp-testing/codeql-cli-nightlies/releases/download/$LATEST" >> "$GITHUB_OUTPUT" lint: name: Lint runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 1 - uses: actions/setup-node@v3 with: node-version: '16.14.2' cache: 'npm' cache-dependency-path: extensions/ql-vscode/package-lock.json - name: Install dependencies working-directory: extensions/ql-vscode run: | npm ci shell: bash - name: Check types working-directory: extensions/ql-vscode run: | npm run check-types - name: Lint working-directory: extensions/ql-vscode run: | npm run lint - name: Lint scenarios working-directory: extensions/ql-vscode run: | npm run lint:scenarios unit-test: name: Unit Test runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 1 - uses: actions/setup-node@v3 with: node-version: '16.14.2' cache: 'npm' cache-dependency-path: extensions/ql-vscode/package-lock.json - name: Install dependencies working-directory: extensions/ql-vscode run: | npm ci shell: bash - name: Run unit tests working-directory: extensions/ql-vscode run: | npm run test test: name: Test runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest] steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 1 - uses: actions/setup-node@v3 with: node-version: '16.14.2' cache: 'npm' cache-dependency-path: extensions/ql-vscode/package-lock.json - name: Install dependencies working-directory: extensions/ql-vscode run: | npm ci shell: bash - name: Build working-directory: extensions/ql-vscode env: APP_INSIGHTS_KEY: '${{ secrets.APP_INSIGHTS_KEY }}' run: | npm run build shell: bash - name: Run integration tests (Linux) if: matrix.os == 'ubuntu-latest' working-directory: extensions/ql-vscode env: VSCODE_CODEQL_GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' run: | unset DBUS_SESSION_BUS_ADDRESS /usr/bin/xvfb-run npm run integration - name: Run integration tests (Windows) if: matrix.os == 'windows-latest' working-directory: extensions/ql-vscode env: VSCODE_CODEQL_GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' run: | npm run integration set-matrix: name: Set Matrix for cli-test runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set the variables id: set-variables run: echo "cli-versions=$(cat ./extensions/ql-vscode/supported_cli_versions.json | jq -rc)" >> $GITHUB_OUTPUT outputs: cli-versions: ${{ steps.set-variables.outputs.cli-versions }} cli-test: name: CLI Test runs-on: ${{ matrix.os }} needs: [find-nightly, set-matrix] strategy: matrix: os: [ubuntu-latest, windows-latest] version: ${{ fromJson(needs.set-matrix.outputs.cli-versions) }} fail-fast: false env: CLI_VERSION: ${{ matrix.version }} NIGHTLY_URL: ${{ needs.find-nightly.outputs.url }} TEST_CODEQL_PATH: '${{ github.workspace }}/codeql' steps: - name: Checkout uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '16.14.2' cache: 'npm' cache-dependency-path: extensions/ql-vscode/package-lock.json - name: Install dependencies working-directory: extensions/ql-vscode run: | npm ci shell: bash - name: Build working-directory: extensions/ql-vscode run: | npm run build shell: bash - name: Decide on ref of CodeQL repo id: choose-ref shell: bash run: | if [[ "${{ matrix.version }}" == "nightly" ]] then REF="codeql-cli/latest" else REF="codeql-cli/${{ matrix.version }}" fi echo "ref=$REF" >> "$GITHUB_OUTPUT" - name: Checkout QL uses: actions/checkout@v3 with: repository: github/codeql ref: ${{ steps.choose-ref.outputs.ref }} path: codeql - name: Run CLI tests (Linux) working-directory: extensions/ql-vscode if: matrix.os == 'ubuntu-latest' run: | unset DBUS_SESSION_BUS_ADDRESS /usr/bin/xvfb-run npm run cli-integration - name: Run CLI tests (Windows) working-directory: extensions/ql-vscode if: matrix.os == 'windows-latest' run: | npm run cli-integration