diff --git a/.github/workflows/bats.yaml b/.github/workflows/bats.yaml index e393914fb..74861f411 100644 --- a/.github/workflows/bats.yaml +++ b/.github/workflows/bats.yaml @@ -8,7 +8,7 @@ jobs: # deploy only these content CONTENT: "fastapi-simple quarto-website-py" CONNECT_LICENSE: ${{ secrets.CONNECT_LICENSE }} - PYTHON_VERSION: 3.12.1 + PYTHON_VERSION: 3.12 QUARTO_VERSION: 1.4.549 strategy: fail-fast: false @@ -37,6 +37,7 @@ jobs: with: version: ${{ env.QUARTO_VERSION }} - uses: extractions/setup-just@v2 + - uses: actions/download-artifact@v4 with: name: bin @@ -45,5 +46,6 @@ jobs: - run: chmod -R +x ./bin - run: just bats install - run: just bats test common + - run: just bats build-connect - run: just bats test init - run: just bats test deploy diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml index b0a34dc42..acbb7a46b 100644 --- a/.github/workflows/nightly.yaml +++ b/.github/workflows/nightly.yaml @@ -31,20 +31,6 @@ jobs: needs: nightly secrets: inherit uses: ./.github/workflows/cleanup.yaml - package: - needs: build - uses: ./.github/workflows/package.yaml - archive: - needs: build - uses: ./.github/workflows/archive.yaml - upload: - needs: - - archive - - package - uses: ./.github/workflows/upload.yaml - with: - nightly: true - secrets: inherit # Extensions vscode: diff --git a/.github/workflows/pull-request.yaml b/.github/workflows/pull-request.yaml index 49b955870..c482ec37e 100644 --- a/.github/workflows/pull-request.yaml +++ b/.github/workflows/pull-request.yaml @@ -39,8 +39,9 @@ jobs: secrets: inherit uses: ./.github/workflows/bats.yaml - # disable the vscode-ui tests for now - # vscode-ui: - # needs: build - # secrets: inherit - # uses: ./.github/workflows/vscode-ui.yaml + vscode-ui: + needs: + - build + - package + secrets: inherit + uses: ./.github/workflows/vscode-ui.yaml diff --git a/.github/workflows/vscode-ui.yaml b/.github/workflows/vscode-ui.yaml index bca368a64..e9c441bfb 100644 --- a/.github/workflows/vscode-ui.yaml +++ b/.github/workflows/vscode-ui.yaml @@ -4,13 +4,13 @@ on: env: VSCODE_VERSION: stable jobs: - native: + ui-tests: env: - DOCKER: false DOCKER_CONNECT: true - # deploy only these content - CONTENT: "fastapi-simple quarto-website-py" CONNECT_LICENSE: ${{ secrets.CONNECT_LICENSE }} + CI: true + QUARTO_VERSION: 1.4.549 + PYTHON_VERSION: 3.12.4 strategy: fail-fast: false matrix: @@ -22,32 +22,36 @@ jobs: fetch-depth: 0 - uses: ./.github/actions/setup - uses: extractions/setup-just@v2 - - uses: actions/setup-node@v4 - with: - node-version: 20.x - - uses: actions/checkout@v4 - with: - repository: rstudio/connect-content - path: "test/content" - sparse-checkout: bundles - sparse-checkout-cone-mode: false - token: ${{ secrets.CONNECT_PAT }} + - uses: actions/setup-python@v5 with: - python-version: 3.9 - - uses: quarto-dev/quarto-actions/setup@v2 - with: - version: 1.4.549 + python-version: ${{ env.PYTHON_VERSION }} + # disabling quarto until we need it + # - uses: quarto-dev/quarto-actions/setup@v2 + # with: + # version: ${{ env.QUARTO_VERSION }} - uses: actions/download-artifact@v4 with: name: bin path: bin + - uses: actions/download-artifact@v4 + with: + name: dist + path: dist + - uses: t1m0thyj/unlock-keyring@v1 - run: chmod -R +x ./bin - - run: just package + + - name: Extract dist + run: unzip dist/*-linux-amd64.vsix -d dist/ext + - run: just vscode configure - run: just vscode-ui install - - run: just vscode-ui test + - run: just vscode-ui build-connect + - run: just vscode-ui test vscode-nested + env: + SPEC_PATH: ./test/specs/nested-fastapi.spec.ts + WORKSPACE_PATH: ../sample-content/ - name: Save screenshots uses: actions/upload-artifact@v4 diff --git a/test/bats/justfile b/test/bats/justfile index e83bfd75f..61b1b4321 100644 --- a/test/bats/justfile +++ b/test/bats/justfile @@ -24,6 +24,13 @@ default: just install just test +build-connect: + #!/usr/bin/env bash + set -eou pipefail + {{ _with_debug }} + + docker compose -f ../docker-compose.yml build + # Deletes ephemeral project files (i.e., cleans the project). clean: #!/usr/bin/env bash @@ -53,6 +60,7 @@ fuzzbucket-stop: pip install -r ../setup/requirements.txt fuzzbucket-client rm connect-publishing-client + # Executes commands via `npm`. Equivalent to `npm run`. Provides arbitrary command chaining inside of Docker from project root (i.e., `just bats run test`) run *args: #!/usr/bin/env bash diff --git a/test/scripts/test-runner.bash b/test/scripts/test-runner.bash index 093913e08..cd1b34b8d 100755 --- a/test/scripts/test-runner.bash +++ b/test/scripts/test-runner.bash @@ -14,12 +14,11 @@ fi setup_connect() { pip install -r ../setup/requirements.txt if [[ "${DOCKER_CONNECT}" = true ]]; then - docker compose -f ../docker-compose.yml build docker compose -f ../docker-compose.yml up -d export CONNECT_SERVER="http://localhost:3939" export CONNECT_API_KEY="$(python ../setup/gen_apikey.py 'admin')" # wait until Connect is available - timeout 100 bash -c \ + timeout 10 bash -c \ 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' ${CONNECT_SERVER}/__ping__)" != "200" ]]; \ do sleep 1; \ echo "retry"; \ diff --git a/test/vscode-ui/justfile b/test/vscode-ui/justfile index fd60692eb..e951e2399 100644 --- a/test/vscode-ui/justfile +++ b/test/vscode-ui/justfile @@ -31,7 +31,7 @@ build-connect: set -eou pipefail {{ _with_debug }} - docker compose build + docker compose -f ../docker-compose.yml build # Deletes ephemeral project files (i.e., cleans the project). clean: @@ -67,4 +67,5 @@ test *args: #!/usr/bin/env bash set -eou pipefail {{ _with_debug }} + ../scripts/test-runner.bash {{ args }} diff --git a/test/vscode-ui/wdio.conf.ts b/test/vscode-ui/wdio.conf.ts index 3b24fc764..0f68d21c6 100644 --- a/test/vscode-ui/wdio.conf.ts +++ b/test/vscode-ui/wdio.conf.ts @@ -79,7 +79,10 @@ export const config: Options.Testrunner = { browserVersion: "stable", // also possible: "insiders" or a specific version e.g. "1.80.0" "wdio:vscodeOptions": { // points to directory where extension package.json is located - extensionPath: path.resolve(__dirname, "../../extensions/vscode/"), + extensionPath: + process.env.CI === "true" + ? path.resolve(__dirname, "../../dist/ext/") + : path.resolve(__dirname, "../../extensions/vscode/"), workspacePath: path.resolve( __dirname, process.env.WORKSPACE_PATH || "../sample-content/",