VS Codeのエージェントモードを拡張するには、を試してください!

継続的インテグレーション

拡張機能の統合テストはCIサービスで実行できます。@vscode/test-electronライブラリは、CIプロバイダーでの拡張機能テストのセットアップに役立ち、Azure Pipelinesでのサンプル拡張機能のセットアップが含まれています。ビルドパイプラインを確認するか、azure-pipelines.ymlファイルに直接移動できます。

自動発行

また、CIを構成して、拡張機能の新しいバージョンを自動的に発行することもできます。

発行コマンドは、vsceを使用してローカル環境から発行する場合と似ていますが、Personal Access Token (PAT) を安全な方法で提供する必要があります。PATをVSCE_PATというシークレット変数として保存することで、vsceはそれを使用できるようになります。シークレット変数は決して公開されないため、CIパイプラインで安全に使用できます。

Azure Pipelines

Azure Pipelines

Azure Pipelinesは、Windows、macOS、Linuxでテストの実行をサポートしているため、VS Code拡張機能テストの実行に最適です。オープンソースプロジェクトの場合、無制限の実行時間と10個の無料の並列ジョブが提供されます。このセクションでは、拡張機能テストを実行するためのAzure Pipelinesのセットアップ方法について説明します。

まず、Azure DevOpsで無料アカウントを作成し、拡張機能用のAzure DevOpsプロジェクトを作成します。

次に、以下のazure-pipelines.ymlファイルを拡張機能のリポジトリのルートに追加します。ヘッドレスLinux CIマシンでVS Codeを実行するために必要なLinux用のxvfbセットアップスクリプトを除けば、定義は簡単です。

trigger:
  branches:
    include:
    - main
  tags:
    include:
    - v*

strategy:
  matrix:
    linux:
      imageName: 'ubuntu-latest'
    mac:
      imageName: 'macos-latest'
    windows:
      imageName: 'windows-latest'

pool:
  vmImage: $(imageName)

steps:

- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- bash: |
    /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
    echo ">>> Started xvfb"
  displayName: Start xvfb
  condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))

- bash: |
    echo ">>> Compile vscode-test"
    yarn && yarn compile
    echo ">>> Compiled vscode-test"
    cd sample
    echo ">>> Run sample integration test"
    yarn && yarn compile && yarn test
  displayName: Run Tests
  env:
    DISPLAY: ':99.0'

最後に、DevOpsプロジェクトで新しいパイプラインを作成し、azure-pipelines.ymlファイルを指定します。ビルドをトリガーすると、これで完了です。

pipelines

ブランチにプッシュしたとき、およびプルリクエストでも、ビルドが継続的に実行されるように設定できます。詳細については、ビルドパイプライントリガーを参照してください。

Azure Pipelines による自動発行

  1. Azure DevOpsのシークレットに関する手順に従って、VSCE_PATをシークレット変数として設定します。
  2. vscedevDependenciesとしてインストールします(npm install @vscode/vsce --save-devまたはyarn add @vscode/vsce --dev)。
  3. PATを含まずにpackage.jsondeployスクリプトを宣言します(デフォルトでは、vsceVSCE_PAT環境変数をPersonal Access Tokenとして使用します)。
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. タグが作成された際にもビルドが実行されるようにCIを設定します。
trigger:
  branches:
    include:
    - main
  tags:
    include:
    - refs/tags/v*
  1. azure-pipelines.ymlに、シークレット変数とともにyarn deployを呼び出すpublishステップを追加します。
- bash: |
    echo ">>> Publish"
    yarn deploy
  displayName: Publish
  condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags/'), eq(variables['Agent.OS'], 'Linux'))
  env:
    VSCE_PAT: $(VSCE_PAT)

conditionプロパティは、特定のケースでのみ公開ステップを実行するようにCIに指示します。

この例では、条件には3つのチェックがあります。

  • succeeded() - テストが合格した場合にのみ発行します。
  • startsWith(variables['Build.SourceBranch'], 'refs/tags/') - タグ付けされた(リリース)ビルドの場合にのみ発行します。
  • eq(variables['Agent.OS'], 'Linux') - ビルドが複数のエージェント(Windows、Linuxなど)で実行される場合に含めます。そうでない場合は、条件のその部分を削除します。

VSCE_PATはシークレット変数であるため、環境変数としてすぐに使用することはできません。したがって、環境変数VSCE_PATをシークレット変数に明示的にマップする必要があります。

GitHub Actions

GitHub Actionsを設定して、拡張機能のCIを実行することもできます。ヘッドレスLinux CIマシンでは、VS Codeを実行するためにxvfbが必要なため、現在のOSがLinuxの場合はXvfbが有効な環境でテストを実行します。

on:
  push:
    branches:
      - main

jobs:
  build:
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
    runs-on: ${{ matrix.os }}
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    - name: Install Node.js
      uses: actions/setup-node@v4
      with:
        node-version: 18.x
    - run: npm install
    - run: xvfb-run -a npm test
      if: runner.os == 'Linux'
    - run: npm test
      if: runner.os != 'Linux'

GitHub Actions による自動発行

  1. GitHub Actionsのシークレットに関する手順に従って、VSCE_PATを暗号化されたシークレットとして設定します。
  2. vscedevDependenciesとしてインストールします(npm install @vscode/vsce --save-devまたはyarn add @vscode/vsce --dev)。
  3. PATを含まずにpackage.jsondeployスクリプトを宣言します。
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. タグが作成された際にもビルドが実行されるようにCIを設定します。
on:
  push:
    branches:
    - main
  release:
    types:
    - created
  1. シークレット変数とともにnpm run deployを呼び出すpublishジョブをパイプラインに追加します。
- name: Publish
  if: success() && startsWith(github.ref, 'refs/tags/') && matrix.os == 'ubuntu-latest'
  run: npm run deploy
  env:
    VSCE_PAT: ${{ secrets.VSCE_PAT }}

ifプロパティは、特定のケースでのみ公開ステップを実行するようにCIに指示します。

この例では、条件には3つのチェックがあります。

  • success() - テストが合格した場合にのみ発行します。
  • startsWith(github.ref, 'refs/tags/') - タグ付けされた(リリース)ビルドの場合にのみ発行します。
  • matrix.os == 'ubuntu-latest' - ビルドが複数のエージェント(Windows、Linuxなど)で実行される場合に含めます。そうでない場合は、条件のその部分を削除します。

GitLab CI

GitLab CIは、ヘッドレスDockerコンテナで拡張機能をテストおよび発行するために使用できます。これは、事前に構成されたDockerイメージをプルするか、パイプライン中にxvfbとVisual Studio Codeを実行するために必要なライブラリをインストールすることによって行えます。

image: node:12-buster

before_script:
  - npm install

test:
  script:
    - |
      apt update
      apt install -y libasound2 libgbm1 libgtk-3-0 libnss3 xvfb
      xvfb-run -a npm run test

GitLab CI による自動発行

  1. GitLab CIのドキュメントに従って、VSCE_PATをマスクされた変数として設定します。
  2. vscedevDependenciesとしてインストールします(npm install @vscode/vsce --save-devまたはyarn add @vscode/vsce --dev)。
  3. PATを含まずにpackage.jsondeployスクリプトを宣言します。
"scripts": {
  "deploy": "vsce publish --yarn"
}
  1. マスクされた変数とともにnpm run deployを呼び出すdeployジョブを追加します。これはタグが作成された場合にのみトリガーされます。
deploy:
  only:
    - tags
  script:
    - npm run deploy

よくある質問

継続的インテグレーションにはYarnを使用する必要がありますか?

上記のすべての例は、Yarnで構築された架空のプロジェクトを指していますが、これらはnpmGruntGulp、またはその他のJavaScriptビルドツールを使用するように適応できます。