feat(cli): add /thinkback command to review session timeline of decisions, changes and fixes #3969
Workflow file for this run
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
| # .github/workflows/ci.yml | |
| name: 'Qwen Code CI' | |
| on: | |
| push: | |
| branches: | |
| - 'main' | |
| - 'release/**' | |
| pull_request: | |
| branches: | |
| - 'main' | |
| - 'release/**' | |
| merge_group: | |
| workflow_dispatch: | |
| inputs: | |
| branch_ref: | |
| description: 'Branch to run on' | |
| required: true | |
| default: 'main' | |
| type: 'string' | |
| concurrency: | |
| group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}' | |
| cancel-in-progress: |- | |
| ${{ github.ref != 'refs/heads/main' && !startsWith(github.ref, 'refs/heads/release/') }} | |
| permissions: | |
| checks: 'write' | |
| contents: 'read' | |
| statuses: 'write' | |
| defaults: | |
| run: | |
| shell: 'bash' | |
| env: | |
| ACTIONLINT_VERSION: '1.7.7' | |
| SHELLCHECK_VERSION: '0.11.0' | |
| YAMLLINT_VERSION: '1.35.1' | |
| jobs: | |
| lint: | |
| name: 'Lint' | |
| runs-on: 'ubuntu-latest' | |
| steps: | |
| - name: 'Checkout' | |
| uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5 | |
| with: | |
| ref: '${{ github.event.inputs.branch_ref || github.ref }}' | |
| fetch-depth: 0 | |
| - name: 'Set up Node.js' | |
| uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4.4.0 | |
| with: | |
| node-version-file: '.nvmrc' | |
| cache: 'npm' | |
| - name: 'Install dependencies' | |
| run: 'npm ci' | |
| - name: 'Check lockfile' | |
| run: 'npm run check:lockfile' | |
| - name: 'Install linters' | |
| run: 'node scripts/lint.js --setup' | |
| - name: 'Run ESLint' | |
| run: 'node scripts/lint.js --eslint' | |
| - name: 'Run actionlint' | |
| run: 'node scripts/lint.js --actionlint' | |
| - name: 'Run shellcheck' | |
| run: 'node scripts/lint.js --shellcheck' | |
| - name: 'Run yamllint' | |
| run: 'node scripts/lint.js --yamllint' | |
| - name: 'Run Prettier' | |
| run: 'node scripts/lint.js --prettier' | |
| - name: 'Run sensitive keyword linter' | |
| run: 'node scripts/lint.js --sensitive-keywords' | |
| - name: 'Build CLI package' | |
| run: 'npm run build --workspace=packages/cli' | |
| - name: 'Generate settings schema' | |
| run: 'npm run generate:settings-schema' | |
| - name: 'Check settings schema is up-to-date' | |
| run: | | |
| if [[ -n $(git status --porcelain packages/vscode-ide-companion/schemas/settings.schema.json) ]]; then | |
| echo "❌ Error: settings.schema.json is out of date!" | |
| echo " Please run: npm run generate:settings-schema" | |
| echo " Then commit the updated schema file." | |
| git diff packages/vscode-ide-companion/schemas/settings.schema.json | |
| exit 1 | |
| fi | |
| echo "✅ Settings schema is up-to-date" | |
| # | |
| # Test: Node | |
| # | |
| test: | |
| name: 'Test' | |
| runs-on: '${{ matrix.os }}' | |
| needs: | |
| - 'lint' | |
| permissions: | |
| contents: 'read' | |
| checks: 'write' | |
| pull-requests: 'write' | |
| strategy: | |
| fail-fast: false # So we can see all test failures | |
| matrix: | |
| os: | |
| - 'macos-latest' | |
| - 'ubuntu-latest' | |
| - 'windows-latest' | |
| node-version: | |
| - '20.x' | |
| - '22.x' | |
| - '24.x' | |
| steps: | |
| - name: 'Checkout' | |
| uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5 | |
| - name: 'Set up Node.js ${{ matrix.node-version }}' | |
| uses: 'actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020' # ratchet:actions/setup-node@v4 | |
| with: | |
| node-version: '${{ matrix.node-version }}' | |
| cache: 'npm' | |
| cache-dependency-path: 'package-lock.json' | |
| registry-url: 'https://registry.npmjs.org/' | |
| - name: 'Configure npm for rate limiting' | |
| run: |- | |
| npm config set fetch-retry-mintimeout 20000 | |
| npm config set fetch-retry-maxtimeout 120000 | |
| npm config set fetch-retries 5 | |
| npm config set fetch-timeout 300000 | |
| - name: 'Install dependencies' | |
| run: |- | |
| npm ci --prefer-offline --no-audit --progress=false | |
| - name: 'Build project' | |
| run: |- | |
| npm run build | |
| - name: 'Run tests and generate reports' | |
| env: | |
| NO_COLOR: true | |
| run: 'npm run test:ci' | |
| - name: 'Publish Test Report (for non-forks)' | |
| if: |- | |
| ${{ always() && (github.event.pull_request.head.repo.full_name == github.repository) }} | |
| uses: 'dorny/test-reporter@dc3a92680fcc15842eef52e8c4606ea7ce6bd3f3' # ratchet:dorny/test-reporter@v2 | |
| with: | |
| name: 'Test Results (Node ${{ matrix.node-version }})' | |
| path: 'packages/*/junit.xml' | |
| reporter: 'java-junit' | |
| fail-on-error: 'false' | |
| - name: 'Upload Test Results Artifact (for forks)' | |
| if: |- | |
| ${{ always() && (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} | |
| uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4 | |
| with: | |
| name: 'test-results-fork-${{ matrix.node-version }}-${{ matrix.os }}' | |
| path: 'packages/*/junit.xml' | |
| - name: 'Upload coverage reports' | |
| if: |- | |
| ${{ always() }} | |
| uses: 'actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02' # ratchet:actions/upload-artifact@v4 | |
| with: | |
| name: 'coverage-reports-${{ matrix.node-version }}-${{ matrix.os }}' | |
| path: 'packages/*/coverage' | |
| post_coverage_comment: | |
| name: 'Post Coverage Comment' | |
| runs-on: 'ubuntu-latest' | |
| needs: 'test' | |
| if: |- | |
| ${{ always() && github.event_name == 'pull_request' && (github.event.pull_request.head.repo.full_name == github.repository) }} | |
| continue-on-error: true | |
| permissions: | |
| contents: 'read' # For checkout | |
| pull-requests: 'write' # For commenting | |
| strategy: | |
| matrix: | |
| # Reduce noise by only posting the comment once | |
| os: | |
| - 'ubuntu-latest' | |
| node-version: | |
| - '22.x' | |
| steps: | |
| - name: 'Checkout' | |
| uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5 | |
| - name: 'Download coverage reports artifact' | |
| uses: 'actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0' # ratchet:actions/download-artifact@v5 | |
| with: | |
| name: 'coverage-reports-${{ matrix.node-version }}-${{ matrix.os }}' | |
| path: 'coverage_artifact' # Download to a specific directory | |
| - name: 'Post Coverage Comment using Composite Action' | |
| uses: './.github/actions/post-coverage-comment' # Path to the composite action directory | |
| with: | |
| cli_json_file: 'coverage_artifact/cli/coverage/coverage-summary.json' | |
| core_json_file: 'coverage_artifact/core/coverage/coverage-summary.json' | |
| cli_full_text_summary_file: 'coverage_artifact/cli/coverage/full-text-summary.txt' | |
| core_full_text_summary_file: 'coverage_artifact/core/coverage/full-text-summary.txt' | |
| node_version: '${{ matrix.node-version }}' | |
| os: '${{ matrix.os }}' | |
| github_token: '${{ secrets.GITHUB_TOKEN }}' | |
| codeql: | |
| name: 'CodeQL' | |
| runs-on: 'ubuntu-latest' | |
| permissions: | |
| actions: 'read' | |
| contents: 'read' | |
| security-events: 'write' | |
| steps: | |
| - name: 'Checkout' | |
| uses: 'actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8' # ratchet:actions/checkout@v5 | |
| - name: 'Initialize CodeQL' | |
| uses: 'github/codeql-action/init@df559355d593797519d70b90fc8edd5db049e7a2' # ratchet:github/codeql-action/init@v3 | |
| with: | |
| languages: 'javascript' | |
| - name: 'Perform CodeQL Analysis' | |
| uses: 'github/codeql-action/analyze@df559355d593797519d70b90fc8edd5db049e7a2' # ratchet:github/codeql-action/analyze@v3 |