mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-04-19 12:57:17 +00:00
Use a dedicated GitHub Actions workflow for testing TypeScript/JavaScript code
The "build" workflow builds the application for all supported targets, generates workflow artifacts from which the builds can be downloaded by users and beta testers, and publishes nightly and production releases. As if that wasn't enough, the workflow was also configured to perform the unrelated operation of running the project's test suites. This monolithic approach is harmful for multiple reasons: * Makes it difficult to interpret a failed workflow run * Unnecessarily adds a significant amount of extra content to the already extensive logs produced by the build process * Makes the build workflow more difficult to maintain * Increases the length of a build workflow run * Increases the impact of a spurious failure * Increases the turnaround time for contributors and maintainers to get feedback from the CI system The test run operation is hereby moved to a dedicated workflow, consistent with standard practices for Arduino Tooling projects.
This commit is contained in:
parent
6e695429cc
commit
9331d2ec0d
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@ -372,11 +372,6 @@ jobs:
|
|||||||
IS_NIGHTLY: ${{ needs.build-type-determination.outputs.is-nightly }}
|
IS_NIGHTLY: ${{ needs.build-type-determination.outputs.is-nightly }}
|
||||||
IS_RELEASE: ${{ needs.build-type-determination.outputs.is-release }}
|
IS_RELEASE: ${{ needs.build-type-determination.outputs.is-release }}
|
||||||
CAN_SIGN: ${{ secrets[matrix.config.certificate-secret] != '' }}
|
CAN_SIGN: ${{ secrets[matrix.config.certificate-secret] != '' }}
|
||||||
# The CREATE_* environment vars are only used to run tests. These secrets are optional. Dependent tests will
|
|
||||||
# be skipped if not available.
|
|
||||||
CREATE_USERNAME: ${{ secrets.CREATE_USERNAME }}
|
|
||||||
CREATE_PASSWORD: ${{ secrets.CREATE_PASSWORD }}
|
|
||||||
CREATE_CLIENT_SECRET: ${{ secrets.CREATE_CLIENT_SECRET }}
|
|
||||||
working-directory: ${{ matrix.config.working-directory || './' }}
|
working-directory: ${{ matrix.config.working-directory || './' }}
|
||||||
run: |
|
run: |
|
||||||
# See: https://www.electron.build/code-signing
|
# See: https://www.electron.build/code-signing
|
||||||
@ -393,9 +388,6 @@ jobs:
|
|||||||
yarn install --immutable
|
yarn install --immutable
|
||||||
|
|
||||||
yarn --cwd arduino-ide-extension build
|
yarn --cwd arduino-ide-extension build
|
||||||
yarn test
|
|
||||||
yarn --cwd arduino-ide-extension test:slow
|
|
||||||
|
|
||||||
yarn --cwd electron-app rebuild
|
yarn --cwd electron-app rebuild
|
||||||
yarn --cwd electron-app build
|
yarn --cwd electron-app build
|
||||||
yarn --cwd electron-app package
|
yarn --cwd electron-app package
|
||||||
|
134
.github/workflows/test-javascript.yml
vendored
Normal file
134
.github/workflows/test-javascript.yml
vendored
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
name: Test JavaScript
|
||||||
|
|
||||||
|
env:
|
||||||
|
# See vars.GO_VERSION field of https://github.com/arduino/arduino-cli/blob/master/DistTasks.yml
|
||||||
|
GO_VERSION: '1.21'
|
||||||
|
# See: https://github.com/actions/setup-node/#readme
|
||||||
|
NODE_VERSION: 18.17
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/test-javascript.ya?ml"
|
||||||
|
- "**/.mocharc.js"
|
||||||
|
- "**/.mocharc.jsonc?"
|
||||||
|
- "**/.mocharc.ya?ml"
|
||||||
|
- "**/package.json"
|
||||||
|
- "**/package-lock.json"
|
||||||
|
- "**/yarn.lock"
|
||||||
|
- "tests/testdata/**"
|
||||||
|
- "**/tsconfig.json"
|
||||||
|
- "**.[jt]sx?"
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- ".github/workflows/test-javascript.ya?ml"
|
||||||
|
- "**/.mocharc.js"
|
||||||
|
- "**/.mocharc.jsonc?"
|
||||||
|
- "**/.mocharc.ya?ml"
|
||||||
|
- "**/package.json"
|
||||||
|
- "**/package-lock.json"
|
||||||
|
- "**/yarn.lock"
|
||||||
|
- "tests/testdata/**"
|
||||||
|
- "**/tsconfig.json"
|
||||||
|
- "**.[jt]sx?"
|
||||||
|
workflow_dispatch:
|
||||||
|
repository_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run-determination:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions: {}
|
||||||
|
outputs:
|
||||||
|
result: ${{ steps.determination.outputs.result }}
|
||||||
|
steps:
|
||||||
|
- name: Determine if the rest of the workflow should run
|
||||||
|
id: determination
|
||||||
|
run: |
|
||||||
|
RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x"
|
||||||
|
# The `create` event trigger doesn't support `branches` filters, so it's necessary to use Bash instead.
|
||||||
|
if [[
|
||||||
|
"${{ github.event_name }}" != "create" ||
|
||||||
|
"${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX
|
||||||
|
]]; then
|
||||||
|
# Run the other jobs.
|
||||||
|
RESULT="true"
|
||||||
|
else
|
||||||
|
# There is no need to run the other jobs.
|
||||||
|
RESULT="false"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "result=$RESULT" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
test:
|
||||||
|
name: test (${{ matrix.project.path }}, ${{ matrix.operating-system }})
|
||||||
|
needs: run-determination
|
||||||
|
if: needs.run-determination.outputs.result == 'true'
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
project:
|
||||||
|
- path: .
|
||||||
|
operating-system:
|
||||||
|
- macos-latest
|
||||||
|
- ubuntu-latest
|
||||||
|
- windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
cache: yarn
|
||||||
|
node-version: ${{ env.NODE_VERSION }}
|
||||||
|
|
||||||
|
# See: https://github.com/eclipse-theia/theia/blob/master/doc/Developing.md#prerequisites
|
||||||
|
- name: Install Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.11.x'
|
||||||
|
|
||||||
|
- name: Install Go
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: ${{ env.GO_VERSION }}
|
||||||
|
|
||||||
|
- name: Install Taskfile
|
||||||
|
uses: arduino/setup-task@v2
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
version: 3.x
|
||||||
|
|
||||||
|
- name: Install npm package dependencies
|
||||||
|
env:
|
||||||
|
# Avoid failure of @vscode/ripgrep installation due to GitHub API rate limiting:
|
||||||
|
# https://github.com/microsoft/vscode-ripgrep#github-api-limit-note
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
yarn install
|
||||||
|
|
||||||
|
- name: Compile TypeScript
|
||||||
|
run: |
|
||||||
|
yarn \
|
||||||
|
--cwd arduino-ide-extension \
|
||||||
|
build
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
env:
|
||||||
|
# These secrets are optional. Dependent tests will be skipped if not available.
|
||||||
|
CREATE_USERNAME: ${{ secrets.CREATE_USERNAME }}
|
||||||
|
CREATE_PASSWORD: ${{ secrets.CREATE_PASSWORD }}
|
||||||
|
CREATE_CLIENT_SECRET: ${{ secrets.CREATE_CLIENT_SECRET }}
|
||||||
|
run: |
|
||||||
|
yarn test
|
||||||
|
yarn \
|
||||||
|
--cwd arduino-ide-extension \
|
||||||
|
test:slow
|
@ -2,8 +2,9 @@
|
|||||||
|
|
||||||
# Arduino IDE 2.x
|
# Arduino IDE 2.x
|
||||||
|
|
||||||
[](https://github.com/arduino/arduino-ide/actions?query=workflow%3A%22Arduino+IDE%22)
|
[](https://github.com/arduino/arduino-ide/actions/workflows/build.yml)
|
||||||
[](https://github.com/arduino/arduino-ide/actions/workflows/check-javascript.yml)
|
[](https://github.com/arduino/arduino-ide/actions/workflows/check-javascript.yml)
|
||||||
|
[](https://github.com/arduino/arduino-ide/actions/workflows/test-javascript.yml)
|
||||||
|
|
||||||
This repository contains the source code of the Arduino IDE 2.x. If you're looking for the old IDE, go to the [repository of the 1.x version](https://github.com/arduino/Arduino).
|
This repository contains the source code of the Arduino IDE 2.x. If you're looking for the old IDE, go to the [repository of the 1.x version](https://github.com/arduino/Arduino).
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user