create `pr-build-upload-vsix.yaml`
This commit is contained in:
parent
ed2fdabf99
commit
62bbe2edca
|
@ -32,6 +32,10 @@ outputs:
|
|||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
- name: Set target variable
|
||||
id: set-target
|
||||
shell: bash
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
name: 'Run JetBrains Tests'
|
||||
description: 'Setup and run JetBrains IntelliJ tests with all dependencies'
|
||||
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: core/node_modules
|
||||
key: ${{ runner.os }}-core-node-modules-${{ hashFiles('core/package-lock.json') }}
|
||||
|
||||
- name: Build packages and install core dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
node ./scripts/build-packages.js
|
||||
cd core
|
||||
npm ci
|
||||
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4.5.0
|
||||
with:
|
||||
distribution: zulu
|
||||
java-version: 17
|
||||
|
||||
- name: Setup FFmpeg
|
||||
uses: AnimMouse/setup-ffmpeg@v1
|
||||
with:
|
||||
token: ${{ env.GITHUB_TOKEN }}
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v3
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-npm-cache-jetbrains-${{ hashFiles('extensions/vscode/package-lock.json') }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: vscode-extension-cache
|
||||
with:
|
||||
path: extensions/vscode/node_modules
|
||||
key: ${{ runner.os }}-vscode-node-modules-${{ hashFiles('extensions/vscode/package-lock.json') }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: gui-cache
|
||||
with:
|
||||
path: gui/node_modules
|
||||
key: ${{ runner.os }}-gui-node-modules-${{ hashFiles('gui/package-lock.json') }}
|
||||
|
||||
# Cache prepackaged extension build to share with other jobs
|
||||
- uses: actions/cache@v4
|
||||
id: vscode-prepackage-cache
|
||||
with:
|
||||
path: extensions/vscode/build
|
||||
key: ${{ runner.os }}-vscode-prepackage-${{ hashFiles('extensions/vscode/package-lock.json', 'extensions/vscode/**/*.ts', 'extensions/vscode/**/*.json') }}
|
||||
|
||||
# Only run prepackage if not cached - saves ~1 minute
|
||||
- name: Run prepackage script
|
||||
if: steps.vscode-prepackage-cache.outputs.cache-hit != 'true'
|
||||
shell: bash
|
||||
run: |
|
||||
cd extensions/vscode
|
||||
if [ "${{ steps.vscode-extension-cache.outputs.cache-hit }}" != "true" ]; then
|
||||
npm ci
|
||||
fi
|
||||
npm run prepackage
|
||||
env:
|
||||
# https://github.com/microsoft/vscode-ripgrep/issues/9#issuecomment-643965333
|
||||
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: binary-cache
|
||||
with:
|
||||
path: binary/node_modules
|
||||
key: ${{ runner.os }}-binary-node-modules-${{ hashFiles('binary/package-lock.json') }}
|
||||
|
||||
- name: Build the binaries
|
||||
shell: bash
|
||||
run: |
|
||||
cd binary
|
||||
npm run build
|
||||
|
||||
- name: Start test IDE
|
||||
shell: bash
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
export DISPLAY=:99.0
|
||||
Xvfb -ac :99 -screen 0 1920x1080x24 &
|
||||
sleep 10
|
||||
mkdir -p build/reports
|
||||
./gradlew runIdeForUiTests &
|
||||
|
||||
- name: Wait for JB connection
|
||||
uses: jtalk/url-health-check-action@v3
|
||||
with:
|
||||
url: http://127.0.0.1:8082
|
||||
max-attempts: 15
|
||||
retry-delay: 30s
|
||||
|
||||
- name: Run tests
|
||||
shell: bash
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
export DISPLAY=:99.0
|
||||
./gradlew test
|
||||
|
||||
- name: Move video
|
||||
if: ${{ failure() }}
|
||||
shell: bash
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
mv video build/reports
|
||||
|
||||
- name: Copy logs
|
||||
if: ${{ failure() }}
|
||||
shell: bash
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
mv build/idea-sandbox/system/log/ build/reports
|
||||
|
||||
- name: Save fails report
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: jb-failure-report
|
||||
path: |
|
||||
${{ github.workspace }}/extensions/intellij/build/reports
|
|
@ -16,6 +16,9 @@ inputs:
|
|||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.npm
|
||||
|
|
|
@ -4,6 +4,9 @@ description: 'Cache and build packages with npm caching'
|
|||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.npm
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
name: 'Setup VS Code E2E'
|
||||
description: 'Build Linux extension and generate test matrix for E2E tests'
|
||||
inputs:
|
||||
is_fork:
|
||||
description: 'Whether this is a fork (affects SSH tests)'
|
||||
required: false
|
||||
default: 'false'
|
||||
outputs:
|
||||
test_file_matrix:
|
||||
description: 'JSON array of test files'
|
||||
value: ${{ steps.get-test-files.outputs.test_file_matrix }}
|
||||
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
# Build the Linux extension first
|
||||
- name: Build VS Code extension
|
||||
uses: ./.github/actions/build-vscode-extension
|
||||
with:
|
||||
platform: linux
|
||||
arch: x64
|
||||
npm_config_arch: x64
|
||||
pre-release: false
|
||||
commit-sha: ${{ github.sha }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
|
||||
|
||||
# Cache for test matrix generation
|
||||
- name: Cache npm
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-npm-cache-matrix-${{ hashFiles('core/package-lock.json', 'extensions/vscode/package-lock.json') }}
|
||||
|
||||
- name: Cache packages node_modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
packages/*/node_modules
|
||||
key: ${{ runner.os }}-packages-node-modules-${{ hashFiles('packages/*/package-lock.json') }}
|
||||
|
||||
- name: Cache core node modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: core/node_modules
|
||||
key: ${{ runner.os }}-core-node-modules-${{ hashFiles('core/package-lock.json') }}
|
||||
|
||||
- name: Cache vscode extension node modules
|
||||
uses: actions/cache@v4
|
||||
id: vscode-cache
|
||||
with:
|
||||
path: extensions/vscode/node_modules
|
||||
key: ${{ runner.os }}-vscode-node-modules-${{ hashFiles('extensions/vscode/package-lock.json') }}
|
||||
|
||||
# Generate test matrix
|
||||
- name: Build packages and get test files
|
||||
id: get-test-files
|
||||
shell: bash
|
||||
run: |
|
||||
node ./scripts/build-packages.js
|
||||
if [ "${{ steps.vscode-cache.outputs.cache-hit }}" != "true" ]; then
|
||||
cd core
|
||||
npm ci
|
||||
cd ../extensions/vscode
|
||||
npm ci
|
||||
fi
|
||||
cd extensions/vscode
|
||||
npm run e2e:compile
|
||||
if [[ "${{ inputs.is_fork }}" == "true" ]]; then
|
||||
# Exclude SSH tests for forks
|
||||
FILES=$(ls -1 e2e/_output/tests/*.test.js | grep -v "SSH" | jq -R . | jq -s .)
|
||||
else
|
||||
# Include all tests for non-forks
|
||||
FILES=$(ls -1 e2e/_output/tests/*.test.js | jq -R . | jq -s .)
|
||||
fi
|
||||
echo "test_file_matrix<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$FILES" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
# https://github.com/microsoft/vscode-ripgrep/issues/9#issuecomment-643965333
|
||||
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
|
||||
|
||||
- name: Debug Outputs
|
||||
shell: bash
|
||||
run: |
|
||||
echo "Test files: ${{ steps.get-test-files.outputs.test_file_matrix }}"
|
|
@ -0,0 +1,52 @@
|
|||
name: PR Build Upload VSIX
|
||||
|
||||
# Builds and uploads VSIX artifacts for the `oneper` script across Linux, Windows, and macOS ARM platforms
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build-and-upload-vsix:
|
||||
runs-on: ${{ matrix.runner }}
|
||||
timeout-minutes: 10
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- platform: linux
|
||||
arch: x64
|
||||
runner: ubuntu-latest
|
||||
- platform: win32
|
||||
arch: x64
|
||||
runner: windows-latest
|
||||
- platform: darwin
|
||||
arch: arm64
|
||||
runner: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Build VS Code extension
|
||||
uses: ./.github/actions/build-vscode-extension
|
||||
with:
|
||||
platform: ${{ matrix.platform }}
|
||||
arch: ${{ matrix.arch }}
|
||||
npm_config_arch: ${{ matrix.arch }}
|
||||
pre-release: false
|
||||
commit-sha: ${{ github.sha }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Upload build artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: vscode-extension-build-${{ matrix.platform }}-${{ matrix.arch }}
|
||||
path: extensions/vscode/build
|
||||
|
||||
- name: Upload .vsix artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.platform }}-${{ matrix.arch }}-vsix
|
||||
path: "extensions/vscode/*.vsix"
|
|
@ -0,0 +1,266 @@
|
|||
name: PR checks
|
||||
|
||||
# PR Checks run on all PRs to the main branch and must pass before merging.
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
prettier-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: root-cache
|
||||
with:
|
||||
path: node_modules
|
||||
key: ${{ runner.os }}-root-node-modules-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
- name: Install root dependencies
|
||||
if: steps.root-cache.outputs.cache-hit != 'true'
|
||||
run: npm ci
|
||||
|
||||
- name: Check code formatting with Prettier
|
||||
run: npx prettier --check "**/*.{js,jsx,ts,tsx,json,css,md}" --ignore-path .gitignore --ignore-path .prettierignore
|
||||
|
||||
core-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
|
||||
- name: Type check and lint
|
||||
run: |
|
||||
cd core
|
||||
npx tsc --noEmit
|
||||
npm run lint
|
||||
env:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd core
|
||||
npm test
|
||||
npm run vitest
|
||||
env:
|
||||
IGNORE_API_KEY_TESTS: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
||||
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
|
||||
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
|
||||
AZURE_FOUNDRY_CODESTRAL_API_KEY: ${{ secrets.AZURE_FOUNDRY_CODESTRAL_API_KEY }}
|
||||
AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY: ${{ secrets.AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY }}
|
||||
AZURE_OPENAI_GPT41_API_KEY: ${{ secrets.AZURE_OPENAI_GPT41_API_KEY }}
|
||||
|
||||
gui-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
- name: Setup gui component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: gui
|
||||
include-packages: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Type check and lint
|
||||
run: |
|
||||
cd gui
|
||||
npx tsc --noEmit
|
||||
npm run lint
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd gui
|
||||
npm test
|
||||
|
||||
binary-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
- name: Setup binary component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: binary
|
||||
include-packages: false
|
||||
|
||||
- name: Type check
|
||||
run: |
|
||||
cd binary
|
||||
npx tsc --noEmit
|
||||
|
||||
vscode-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
- name: Setup vscode component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: vscode
|
||||
include-packages: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Type check and lint
|
||||
run: |
|
||||
cd extensions/vscode
|
||||
npm run write-build-timestamp
|
||||
npx tsc --noEmit
|
||||
npm run lint
|
||||
|
||||
- name: Run vitest tests
|
||||
run: |
|
||||
cd extensions/vscode
|
||||
npm run vitest
|
||||
|
||||
get-packages-matrix:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
packages: ${{ steps.get-packages.outputs.packages }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Get package list
|
||||
id: get-packages
|
||||
run: |
|
||||
packages=$(find packages/ -maxdepth 1 -type d -not -path packages/ -exec basename {} \; | sort | jq -R -s -c 'split("\n")[:-1]')
|
||||
echo "packages=$packages" >> $GITHUB_OUTPUT
|
||||
echo "Found packages: $packages"
|
||||
|
||||
packages-checks:
|
||||
needs: get-packages-matrix
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
package: ${{ fromJson(needs.get-packages-matrix.outputs.packages) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
|
||||
- name: Test and check ${{ matrix.package }}
|
||||
run: |
|
||||
cd packages/${{ matrix.package }}
|
||||
npm test
|
||||
env:
|
||||
IGNORE_API_KEY_TESTS: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
||||
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
|
||||
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
|
||||
AZURE_FOUNDRY_CODESTRAL_API_KEY: ${{ secrets.AZURE_FOUNDRY_CODESTRAL_API_KEY }}
|
||||
AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY: ${{ secrets.AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY }}
|
||||
AZURE_OPENAI_GPT41_API_KEY: ${{ secrets.AZURE_OPENAI_GPT41_API_KEY }}
|
||||
VOYAGE_API_KEY: ${{ secrets.VOYAGE_API_KEY }}
|
||||
|
||||
vscode-e2e-setup:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
outputs:
|
||||
test_file_matrix: ${{ steps.setup.outputs.test_file_matrix }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup E2E tests and build extension
|
||||
id: setup
|
||||
uses: ./.github/actions/setup-vscode-e2e
|
||||
with:
|
||||
is_fork: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
vscode-e2e-tests:
|
||||
name: ${{ matrix.test_file || 'unknown' }} (${{ matrix.command }})
|
||||
needs: vscode-e2e-setup
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
# Tests requiring secrets need approval from maintainers
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test_file: ${{ fromJson(needs.vscode-e2e-setup.outputs.test_file_matrix) }}
|
||||
command: ["e2e:ci:run", "e2e:ci:run-yaml"]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run VS Code E2E test
|
||||
uses: ./.github/actions/run-vscode-e2e-test
|
||||
with:
|
||||
test_file: ${{ matrix.test_file }}
|
||||
command: ${{ matrix.command }}
|
||||
ssh_key: ${{ secrets.GH_ACTIONS_SSH_TEST_KEY_PEM }}
|
||||
ssh_host: ${{ secrets.GH_ACTIONS_SSH_TEST_DNS_NAME }}
|
||||
is_fork: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
|
||||
|
||||
jetbrains-tests:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run JetBrains tests
|
||||
uses: ./.github/actions/run-jetbrains-tests
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
# GitHub does not have a way of requiring that all checks pass (you must manually select each job)
|
||||
# This action at least lets us manage the list of required tests via source control
|
||||
# so that creators of new jobs can add them to this list
|
||||
require-all-checks-to-pass:
|
||||
if: always()
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- prettier-check
|
||||
- core-checks
|
||||
- gui-checks
|
||||
- binary-checks
|
||||
- vscode-checks
|
||||
- get-packages-matrix
|
||||
- packages-checks
|
||||
- vscode-e2e-setup
|
||||
- vscode-e2e-tests
|
||||
- jetbrains-tests
|
||||
|
||||
steps:
|
||||
- name: Decide whether the needed jobs succeeded or failed
|
||||
uses: re-actors/alls-green@release/v1
|
||||
with:
|
||||
jobs: ${{ toJSON(needs) }}
|
|
@ -1,516 +0,0 @@
|
|||
name: PR checks
|
||||
|
||||
# PR Checks run on all PRs to the main branch and must pass before merging.
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
prettier-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: root-cache
|
||||
with:
|
||||
path: node_modules
|
||||
key: ${{ runner.os }}-root-node-modules-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
- name: Install root dependencies
|
||||
if: steps.root-cache.outputs.cache-hit != 'true'
|
||||
run: npm ci
|
||||
|
||||
- name: Check code formatting with Prettier
|
||||
run: npx prettier --check "**/*.{js,jsx,ts,tsx,json,css,md}" --ignore-path .gitignore --ignore-path .prettierignore
|
||||
|
||||
core-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
|
||||
- name: Type check and lint
|
||||
run: |
|
||||
cd core
|
||||
npx tsc --noEmit
|
||||
npm run lint
|
||||
env:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd core
|
||||
npm test
|
||||
npm run vitest
|
||||
env:
|
||||
IGNORE_API_KEY_TESTS: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
||||
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
|
||||
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
|
||||
AZURE_FOUNDRY_CODESTRAL_API_KEY: ${{ secrets.AZURE_FOUNDRY_CODESTRAL_API_KEY }}
|
||||
AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY: ${{ secrets.AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY }}
|
||||
AZURE_OPENAI_GPT41_API_KEY: ${{ secrets.AZURE_OPENAI_GPT41_API_KEY }}
|
||||
|
||||
gui-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
- name: Setup gui component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: gui
|
||||
include-packages: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Type check and lint
|
||||
run: |
|
||||
cd gui
|
||||
npx tsc --noEmit
|
||||
npm run lint
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd gui
|
||||
npm test
|
||||
|
||||
binary-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
- name: Setup binary component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: binary
|
||||
include-packages: false
|
||||
|
||||
- name: Type check
|
||||
run: |
|
||||
cd binary
|
||||
npx tsc --noEmit
|
||||
|
||||
vscode-checks:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
- name: Setup core component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: core
|
||||
include-root: true
|
||||
- name: Setup vscode component
|
||||
uses: ./.github/actions/setup-component
|
||||
with:
|
||||
component: vscode
|
||||
include-packages: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Type check and lint
|
||||
run: |
|
||||
cd extensions/vscode
|
||||
npm run write-build-timestamp
|
||||
npx tsc --noEmit
|
||||
npm run lint
|
||||
|
||||
- name: Run vitest tests
|
||||
run: |
|
||||
cd extensions/vscode
|
||||
npm run vitest
|
||||
|
||||
get-packages-matrix:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
packages: ${{ steps.get-packages.outputs.packages }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Get package list
|
||||
id: get-packages
|
||||
run: |
|
||||
packages=$(find packages/ -maxdepth 1 -type d -not -path packages/ -exec basename {} \; | sort | jq -R -s -c 'split("\n")[:-1]')
|
||||
echo "packages=$packages" >> $GITHUB_OUTPUT
|
||||
echo "Found packages: $packages"
|
||||
|
||||
packages-checks:
|
||||
needs: get-packages-matrix
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
package: ${{ fromJson(needs.get-packages-matrix.outputs.packages) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
- name: Setup packages
|
||||
uses: ./.github/actions/setup-packages
|
||||
|
||||
- name: Test and check ${{ matrix.package }}
|
||||
run: |
|
||||
cd packages/${{ matrix.package }}
|
||||
npm test
|
||||
env:
|
||||
IGNORE_API_KEY_TESTS: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
||||
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
||||
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
|
||||
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
|
||||
AZURE_FOUNDRY_CODESTRAL_API_KEY: ${{ secrets.AZURE_FOUNDRY_CODESTRAL_API_KEY }}
|
||||
AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY: ${{ secrets.AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY }}
|
||||
AZURE_OPENAI_GPT41_API_KEY: ${{ secrets.AZURE_OPENAI_GPT41_API_KEY }}
|
||||
VOYAGE_API_KEY: ${{ secrets.VOYAGE_API_KEY }}
|
||||
|
||||
vscode-get-test-file-matrix:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
test_file_matrix: ${{ steps.vscode-get-test-file-matrix.outputs.test_file_matrix }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Cache npm
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-npm-cache-matrix-${{ hashFiles('core/package-lock.json', 'extensions/vscode/package-lock.json') }}
|
||||
|
||||
- name: Cache packages node_modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
packages/*/node_modules
|
||||
key: ${{ runner.os }}-packages-node-modules-${{ hashFiles('packages/*/package-lock.json') }}
|
||||
|
||||
- name: Cache core node modules
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: core/node_modules
|
||||
key: ${{ runner.os }}-core-node-modules-${{ hashFiles('core/package-lock.json') }}
|
||||
|
||||
- name: Cache vscode extension node modules
|
||||
uses: actions/cache@v4
|
||||
id: vscode-cache
|
||||
with:
|
||||
path: extensions/vscode/node_modules
|
||||
key: ${{ runner.os }}-vscode-node-modules-${{ hashFiles('extensions/vscode/package-lock.json') }}
|
||||
|
||||
- name: Build packages and get test files
|
||||
id: vscode-get-test-file-matrix
|
||||
run: |
|
||||
node ./scripts/build-packages.js
|
||||
if [ "${{ steps.vscode-cache.outputs.cache-hit }}" != "true" ]; then
|
||||
cd core
|
||||
npm ci
|
||||
cd ../extensions/vscode
|
||||
npm ci
|
||||
fi
|
||||
cd extensions/vscode
|
||||
npm run e2e:compile
|
||||
if [[ "${{ github.event.pull_request.head.repo.fork }}" == "true" || "${{ github.actor }}" == "dependabot[bot]" ]]; then
|
||||
# Exclude SSH tests for forks
|
||||
FILES=$(ls -1 e2e/_output/tests/*.test.js | grep -v "SSH" | jq -R . | jq -s .)
|
||||
else
|
||||
# Include all tests for non-forks
|
||||
FILES=$(ls -1 e2e/_output/tests/*.test.js | jq -R . | jq -s .)
|
||||
fi
|
||||
echo "test_file_matrix<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$FILES" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
# https://github.com/microsoft/vscode-ripgrep/issues/9#issuecomment-643965333
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Debug Outputs
|
||||
run: |
|
||||
echo "Test files: ${{ steps.vscode-get-test-file-matrix.outputs.test_file_matrix }}"
|
||||
|
||||
vscode-package-extension-linux:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
- name: Build VS Code extension
|
||||
uses: ./.github/actions/build-vscode-extension
|
||||
with:
|
||||
platform: linux
|
||||
arch: x64
|
||||
npm_config_arch: x64
|
||||
pre-release: false
|
||||
commit-sha: ${{ github.sha }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Upload build artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: vscode-extension-build-Linux
|
||||
path: extensions/vscode/build
|
||||
|
||||
- name: Upload .vsix artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: linux-x64-vsix
|
||||
path: "extensions/vscode/*.vsix"
|
||||
|
||||
vscode-package-extension-macos:
|
||||
runs-on: macos-13
|
||||
timeout-minutes: 15
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
- name: Build VS Code extension
|
||||
uses: ./.github/actions/build-vscode-extension
|
||||
with:
|
||||
platform: darwin
|
||||
arch: x64
|
||||
npm_config_arch: x64
|
||||
pre-release: false
|
||||
commit-sha: ${{ github.sha }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- name: Upload build artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: vscode-extension-build-macOS
|
||||
path: extensions/vscode/build
|
||||
|
||||
- name: Upload .vsix artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: darwin-x64-vsix
|
||||
path: "extensions/vscode/*.vsix"
|
||||
|
||||
vscode-e2e-tests:
|
||||
name: ${{ matrix.test_file || 'unknown' }} (${{ matrix.command }})
|
||||
needs: [vscode-get-test-file-matrix, vscode-package-extension-linux]
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
# Tests requiring secrets need approval from maintainers
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test_file: ${{ fromJson(needs.vscode-get-test-file-matrix.outputs.test_file_matrix) }}
|
||||
command: ["e2e:ci:run", "e2e:ci:run-yaml"]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run VS Code E2E test
|
||||
uses: ./.github/actions/run-vscode-e2e-test
|
||||
with:
|
||||
test_file: ${{ matrix.test_file }}
|
||||
command: ${{ matrix.command }}
|
||||
ssh_key: ${{ secrets.GH_ACTIONS_SSH_TEST_KEY_PEM }}
|
||||
ssh_host: ${{ secrets.GH_ACTIONS_SSH_TEST_DNS_NAME }}
|
||||
is_fork: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
|
||||
|
||||
jetbrains-tests:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: core/node_modules
|
||||
key: ${{ runner.os }}-core-node-modules-${{ hashFiles('core/package-lock.json') }}
|
||||
|
||||
- name: Build packages and install core dependencies
|
||||
run: |
|
||||
node ./scripts/build-packages.js
|
||||
cd core
|
||||
npm ci
|
||||
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4.5.0
|
||||
with:
|
||||
distribution: zulu
|
||||
java-version: 17
|
||||
|
||||
- name: Setup FFmpeg
|
||||
uses: AnimMouse/setup-ffmpeg@v1
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Setup Gradle
|
||||
uses: gradle/actions/setup-gradle@v3
|
||||
|
||||
- name: Use Node.js from .nvmrc
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: ".nvmrc"
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-npm-cache-jetbrains-${{ hashFiles('extensions/vscode/package-lock.json') }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: vscode-extension-cache
|
||||
with:
|
||||
path: extensions/vscode/node_modules
|
||||
key: ${{ runner.os }}-vscode-node-modules-${{ hashFiles('extensions/vscode/package-lock.json') }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: gui-cache
|
||||
with:
|
||||
path: gui/node_modules
|
||||
key: ${{ runner.os }}-gui-node-modules-${{ hashFiles('gui/package-lock.json') }}
|
||||
|
||||
# Cache prepackaged extension build to share with other jobs
|
||||
- uses: actions/cache@v4
|
||||
id: vscode-prepackage-cache
|
||||
with:
|
||||
path: extensions/vscode/build
|
||||
key: ${{ runner.os }}-vscode-prepackage-${{ hashFiles('extensions/vscode/package-lock.json', 'extensions/vscode/**/*.ts', 'extensions/vscode/**/*.json') }}
|
||||
|
||||
# Only run prepackage if not cached - saves ~1 minute
|
||||
- name: Run prepackage script
|
||||
if: steps.vscode-prepackage-cache.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
cd extensions/vscode
|
||||
if [ "${{ steps.vscode-extension-cache.outputs.cache-hit }}" != "true" ]; then
|
||||
npm ci
|
||||
fi
|
||||
npm run prepackage
|
||||
env:
|
||||
# https://github.com/microsoft/vscode-ripgrep/issues/9#issuecomment-643965333
|
||||
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
id: binary-cache
|
||||
with:
|
||||
path: binary/node_modules
|
||||
key: ${{ runner.os }}-binary-node-modules-${{ hashFiles('binary/package-lock.json') }}
|
||||
|
||||
- name: Build the binaries
|
||||
run: |
|
||||
cd binary
|
||||
npm run build
|
||||
|
||||
- name: Start test IDE
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
export DISPLAY=:99.0
|
||||
Xvfb -ac :99 -screen 0 1920x1080x24 &
|
||||
sleep 10
|
||||
mkdir -p build/reports
|
||||
./gradlew runIdeForUiTests &
|
||||
|
||||
- name: Wait for JB connection
|
||||
uses: jtalk/url-health-check-action@v3
|
||||
with:
|
||||
url: http://127.0.0.1:8082
|
||||
max-attempts: 15
|
||||
retry-delay: 30s
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
export DISPLAY=:99.0
|
||||
./gradlew test
|
||||
|
||||
- name: Move video
|
||||
if: ${{ failure() }}
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
mv video build/reports
|
||||
|
||||
- name: Copy logs
|
||||
if: ${{ failure() }}
|
||||
run: |
|
||||
cd extensions/intellij
|
||||
mv build/idea-sandbox/system/log/ build/reports
|
||||
|
||||
- name: Save fails report
|
||||
if: ${{ failure() }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: jb-failure-report
|
||||
path: |
|
||||
${{ github.workspace }}/extensions/intellij/build/reports
|
||||
|
||||
# GitHub does not have a way of requiring that all checks pass (you must manually select each job)
|
||||
# This action at least lets us manage the list of required tests via source control
|
||||
# so that creators of new jobs can add them to this list
|
||||
require-all-checks-to-pass:
|
||||
if: always()
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- prettier-check
|
||||
- core-checks
|
||||
- gui-checks
|
||||
- binary-checks
|
||||
- vscode-checks
|
||||
- get-packages-matrix
|
||||
- packages-checks
|
||||
- vscode-get-test-file-matrix
|
||||
- vscode-package-extension-linux
|
||||
- vscode-package-extension-macos
|
||||
- vscode-e2e-tests
|
||||
- jetbrains-tests
|
||||
|
||||
steps:
|
||||
- name: Decide whether the needed jobs succeeded or failed
|
||||
uses: re-actors/alls-green@release/v1
|
||||
with:
|
||||
jobs: ${{ toJSON(needs) }}
|
||||
## Currently we only use `vscode-package-extension-macos` for publishing build artifacts for `oneper` script
|
||||
allowed-failures: vscode-package-extension-macos
|
|
@ -200,14 +200,14 @@ install_from_pr() {
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# Map platform names to GitHub runner OS names
|
||||
local artifact_suffix
|
||||
# Map platform names to artifact names for the new workflow
|
||||
local artifact_name
|
||||
case "$platform" in
|
||||
"macos")
|
||||
artifact_suffix="macOS"
|
||||
artifact_name="darwin-arm64-vsix"
|
||||
;;
|
||||
"linux")
|
||||
artifact_suffix="Linux"
|
||||
artifact_name="linux-x64-vsix"
|
||||
;;
|
||||
*)
|
||||
echo "❌ Unknown platform: $platform"
|
||||
|
@ -231,7 +231,7 @@ install_from_pr() {
|
|||
# Get the latest successful workflow run for the branch
|
||||
local run_id=$(gh run list \
|
||||
--repo "$REPO" \
|
||||
--workflow="pr_checks.yaml" \
|
||||
--workflow="pr-build-upload-vsix.yaml" \
|
||||
--branch="$branch_name" \
|
||||
--json databaseId,status,conclusion \
|
||||
--jq ".[] | select(.status == \"completed\" and .conclusion == \"success\") | .databaseId" \
|
||||
|
@ -244,7 +244,7 @@ install_from_pr() {
|
|||
fi
|
||||
|
||||
echo "✅ Found workflow run: $run_id"
|
||||
echo "📥 Downloading vscode-extension-build-$artifact_suffix artifact..."
|
||||
echo "📥 Downloading $artifact_name artifact..."
|
||||
|
||||
# Create temporary directory for download
|
||||
local temp_dir=$(mktemp -d)
|
||||
|
@ -252,9 +252,9 @@ install_from_pr() {
|
|||
# Download the artifact
|
||||
if ! gh run download "$run_id" \
|
||||
--repo "$REPO" \
|
||||
--name "vscode-extension-build-$artifact_suffix" \
|
||||
--name "$artifact_name" \
|
||||
--dir "$temp_dir"; then
|
||||
echo "❌ Failed to download artifact vscode-extension-build-$artifact_suffix"
|
||||
echo "❌ Failed to download artifact $artifact_name"
|
||||
echo " Make sure the workflow run completed successfully for $platform"
|
||||
rm -rf "$temp_dir"
|
||||
exit 1
|
||||
|
|
Loading…
Reference in New Issue