Skip to content

Action for running tests in parallel #11701

Action for running tests in parallel

Action for running tests in parallel #11701

Workflow file for this run

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
name: NetBeans
on:
push:
branches:
- 'master'
- 'delivery'
- 'release*'
pull_request:
# unlocked event is used as super secret restart button
types: [opened, synchronize, unlocked]
# Allows you to run this workflow manually from the Actions tab in GitHub UI
# keep in mind this will have ALL tests enabled
workflow_dispatch:
# cancel other PR workflow run in the same head-base group if it exists (e.g. during PR syncs)
# if this is not a PR run (no github.head_ref and github.base_ref defined), use an UID as group
concurrency:
group: ${{ github.head_ref || github.run_id }}-${{ github.base_ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
env:
# note to self: don't remove the minus again
OPTS: >-
-Dtest-unit-sys-prop.ignore.random.failures=true
# what to build and test, see nbbuild/cluster.properties
CLUSTER_CONFIG: 'full'
# default java distribution used by the setup-java action
# see https://github.com/actions/setup-java#supported-distributions
DEFAULT_JAVA_DISTRIBUTION: 'zulu'
# labels are mapped to env vars for pipeline customization. If this is not a PR, (almost) everything will run, but with a reduced matrix.
# note: env vars don't work in the job's 'if' field but do work within jobs ( https://github.com/actions/runner/issues/1189 ), the whole expression must be duplicated
# labels for special commands:
# 'ci:all-tests' enables everything
# 'ci:no-build' disables the build job (and test jobs too)
# 'ci:dev-build' produces an artifact containing a runnable NetBeans zip distribution
# 'Java' label
test_java: ${{ contains(github.event.pull_request.labels.*.name, 'Java') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'JavaFX' label
test_javafx: ${{ contains(github.event.pull_request.labels.*.name, 'JavaFX') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'JavaDoc' or 'API Change' labels
test_javadoc: ${{ contains(github.event.pull_request.labels.*.name, 'JavaDoc') || contains(github.event.pull_request.labels.*.name, 'API Change') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'JavaScript' label
test_javascript: ${{ contains(github.event.pull_request.labels.*.name, 'JavaScript') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'PHP' label
test_php: ${{ contains(github.event.pull_request.labels.*.name, 'PHP') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'Groovy' label
test_groovy: ${{ contains(github.event.pull_request.labels.*.name, 'Groovy') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'Rust' label
test_rust: ${{ contains(github.event.pull_request.labels.*.name, 'Rust') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'Platform' label
test_platform: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'LSP' label for enabling Language Server Protocol tests
# 'Gradle' or 'Maven' will activate lsp tests too due to test dependencies on project API (ProjectViewTest, LspBrokenReferencesImplTest, ...)
test_lsp: ${{ contains(github.event.pull_request.labels.*.name, 'LSP') || contains(github.event.pull_request.labels.*.name, 'Gradle') || contains(github.event.pull_request.labels.*.name, 'Maven') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'GraalVM' label for tests requirering GraalVM
test_graalvm: ${{ contains(github.event.pull_request.labels.*.name, 'GraalVM') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'VSCode Extension' label for building and testing the VSCode Extension
test_vscode_extension: ${{ contains(github.event.pull_request.labels.*.name, 'VSCode Extension') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'Ant', 'Gradle', 'Maven' and 'MX' labels trigger the build-tools job
test_build_tools: ${{ contains(github.event.pull_request.labels.*.name, 'Ant') || contains(github.event.pull_request.labels.*.name, 'Gradle') || contains(github.event.pull_request.labels.*.name, 'Maven') || contains(github.event.pull_request.labels.*.name, 'MX') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'git', 'subversion' and 'mercurial' labels trigger the versioning job
test_versioning: ${{ contains(github.event.pull_request.labels.*.name, 'git') || contains(github.event.pull_request.labels.*.name, 'subversion') || contains(github.event.pull_request.labels.*.name, 'mercurial') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'Java EE/Jakarta EE', 'Micronaut' and 'enterprise' labels trigger the enterprise job
test_enterprise: ${{ contains(github.event.pull_request.labels.*.name, 'Java EE/Jakarta EE') || contains(github.event.pull_request.labels.*.name, 'Micronaut') || contains(github.event.pull_request.labels.*.name, 'enterprise') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'JavaScript', 'TypeScript', 'HTML', 'CSS', 'CSL' and 'web' labels the trigger web job
test_web: ${{ contains(github.event.pull_request.labels.*.name, 'JavaScript') || contains(github.event.pull_request.labels.*.name, 'TypeScript') || contains(github.event.pull_request.labels.*.name, 'HTML') || contains(github.event.pull_request.labels.*.name, 'CSS') || contains(github.event.pull_request.labels.*.name, 'CSL') || contains(github.event.pull_request.labels.*.name, 'web') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
# 'tests' label activates an extra step which builds all tests
test_tests: ${{ contains(github.event.pull_request.labels.*.name, 'tests') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
jobs:
# primary build job, most other jobs use the artifact produced here
# artifact is only produced once in the matrix
base-build:
name: Build Clusters on JDK ${{ matrix.java }}
if: contains(github.event.pull_request.labels.*.name, 'ci:no-build') == false
runs-on: ubuntu-latest
timeout-minutes: 40
strategy:
matrix:
java: [ '17', '21', '24-ea' ]
exclude:
- java: ${{ github.event_name == 'pull_request' && 'nothing' || '21' }}
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Checkout ${{ github.ref }} ( ${{ github.sha }} )
uses: actions/checkout@v4
with:
persist-credentials: false
submodules: false
show-progress: false
- name: Caching dependencies
uses: actions/cache@v4
with:
path: ~/.hgexternalcache
key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
restore-keys: ${{ runner.os }}-
- name: Build NetBeans
run: ant $OPTS -quiet -Dcluster.config=$CLUSTER_CONFIG build-nozip
- name: Prepare Artifact
if: ${{ matrix.java == '17' }}
run: tar -I 'zstd -9 -T0' -cf /tmp/build.tar.zst --exclude ".git" .
- name: Upload Workspace
if: ${{ (matrix.java == '17') && success() }}
uses: actions/upload-artifact@v4
with:
name: build
path: /tmp/build.tar.zst
compression-level: 0
retention-days: 2
if-no-files-found: error
- name: Create Dev Build
if: ${{ matrix.java == '17' && contains(github.event.pull_request.labels.*.name, 'ci:dev-build') && success() }}
run: ant $OPTS -quiet -Dcluster.config=$CLUSTER_CONFIG zip-cluster-config
- name: Upload Dev Build
if: ${{ matrix.java == '17' && contains(github.event.pull_request.labels.*.name, 'ci:dev-build') && success() }}
uses: actions/upload-artifact@v4
with:
name: dev-build_${{github.event.pull_request.number || github.run_id}}
path: nbbuild/NetBeans-*.zip
compression-level: 0
retention-days: 7
if-no-files-found: error
nb-javac-smokecheck:
name: "NetBeans on nb-javac"
# Run test job only when the 'nb-javac' label is added
if: ${{ contains(github.event.pull_request.labels.*.name, 'nb-javac') }}
runs-on: ubuntu-latest
steps:
- name: Checkout ${{ github.ref }} ( ${{ github.sha }} )
uses: actions/checkout@v4
with:
persist-credentials: false
submodules: false
show-progress: false
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
java-version: 17
- name: Caching dependencies
uses: actions/cache/restore@v4
with:
path: ~/.hgexternalcache
key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
restore-keys: ${{ runner.os }}-
- name: Download External Binaries
run: ant $OPTS download-all-extbins
- name: Build NetBeans with nb-javac
run: ant $OPTS build -Dnbjavac.class.path=java/libs.javacapi/external/*.jar
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Test with Commit Validation
run: ant $OPTS commit-validation -Dnbjavac.class.path=java/libs.javacapi/external/*.jar
# secondary jobs
commit-validation:
name: CV on ${{ matrix.os }}/JDK ${{ matrix.java }}
needs: base-build
runs-on: ${{ matrix.os }}
timeout-minutes: 40
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
java: [ 17 ]
include:
- os: ubuntu-latest
java: 23
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
if: contains(matrix.os, 'ubuntu') && success()
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
# tar on MacOS is not aware of zstd "tar --zstd -xf build.tar.zst" doesn't work
- name: Extract on MacOS
if: contains(matrix.os, 'macos') && success()
run: unzstd -c build.tar.zst | tar -x
- name: Extract on Linux/Windows
if: contains(matrix.os, 'macos') == false && success()
run: tar --zstd -xf build.tar.zst
- name: platform/masterfs
run: .github/retry.sh ant $OPTS -f platform/masterfs test
- name: Commit Validation tests
run: .github/retry.sh ant $OPTS -Dcluster.config=$CLUSTER_CONFIG commit-validation
- name: platform/core.network
run: ant $OPTS -f platform/core.network test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: |
./*/*/build/test/*/results/TEST-*.xml
./nbbuild/build/test/commit-validation/results/TEST-*.xml
# commit related checks - some steps run even when the build is dissabled
paperwork:
name: Check Paperwork on Linux/JDK ${{ matrix.java }}
needs: base-build
if: ${{ !cancelled() }}
runs-on: ubuntu-latest
timeout-minutes: 60
env:
ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
strategy:
matrix:
java: [ '17' ]
steps:
- name: Check PR labels
if: ${{ github.event_name == 'pull_request' && join(github.event.pull_request.labels.*.name) == '' }}
run: |
echo "::error::PRs must be labeled, see: https://cwiki.apache.org/confluence/display/NETBEANS/PRs+and+You+-+A+reviewer+Guide"
exit 1
- name: Checkout ${{ github.ref }} ( ${{ github.sha }} )
if: ${{ !cancelled() }}
uses: actions/checkout@v4
with:
persist-credentials: false
submodules: false
show-progress: false
- name: Set up JDK 23 for scripts
if: ${{ github.event_name == 'pull_request' && !cancelled() }}
uses: actions/setup-java@v4
with:
java-version: 23
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Check Commit Headers
if: ${{ github.event_name == 'pull_request' && !cancelled() }}
run: java --enable-preview .github/scripts/CommitHeaderChecker.java ${{ github.server_url }}/${{ github.repository }}/pull/${{ github.event.pull_request.number }}
- name: Set up JDK ${{ matrix.java }}
if: ${{ !cancelled() }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Check line endings and verify RAT report
if: ${{ !cancelled() }}
run: |
nbbuild/travis/check-line-endings.sh
ant $OPTS -quiet build-source-config
mkdir scratch && cd scratch
unzip -qq ../nbbuild/build/release-src*
ant $OPTS -quiet rat -Drat-report.haltonfailure=true
- name: Clean Workspace
if: ${{ !cancelled() }}
run: cd ..; rm -Rf netbeans; mkdir netbeans
- name: Download Build
if: ${{ needs.base-build.result == 'success' && !cancelled() }}
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
if: ${{ needs.base-build.result == 'success' && !cancelled() }}
run: tar --zstd -xf build.tar.zst
- name: Verify libs and licenses
if: ${{ needs.base-build.result == 'success' && !cancelled() }}
run: ant $OPTS verify-libs-and-licenses -Dverify-libs-and-licenses.haltonfailure=true
- name: Run check-sigtests-release
if: ${{ needs.base-build.result == 'success' && !cancelled() }}
run: ant $OPTS -quiet check-sigtests-release -Dfail.on.error=true
- name: Run gen-sigtests-release
if: ${{ needs.base-build.result == 'success' && !cancelled() }}
run: ant $OPTS -quiet gen-sigtests-release
build-system-test:
name: Build-System / Misc Tests on Linux/JDK ${{ matrix.java }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 100
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: Test Netbeans Build System
run: ant $OPTS -Dcluster.config=$CLUSTER_CONFIG localtest
- name: harness/o.n.insane
run: ant $OPTS -f harness/o.n.insane test
- name: harness/apisupport.harness
run: ant $OPTS -f harness/apisupport.harness test
- name: harness/harness/nbjunit
run: ant $OPTS -f harness/nbjunit test
- name: harness/jellytools.platform
run: ant $OPTS -f harness/jellytools.platform test -Dtest.config=stable
- name: ergonomics/ide.ergonomics
run: ant $OPTS -f ergonomics/ide.ergonomics test -Dtest.config=commit
- name: nb/deadlock.detector
run: ant $OPTS -f nb/deadlock.detector test
- name: nb/ide.branding
run: ant $OPTS -f nb/ide.branding test
- name: nb/o.n.upgrader
run: ant $OPTS -f nb/o.n.upgrader test
# - name: nb/updatecenters
# run: ant $OPTS -f nb/updatecenters test
# 5-6 min
- name: Build nbms
run: ant $OPTS build-nbms
# runs only in PRs if requested; ~18 min
- name: Build all Tests
if: env.test_tests == 'true' && github.event_name == 'pull_request' && success()
run: ant -quiet -Dcluster.config=$CLUSTER_CONFIG test -Dtest.includes=NoTestsJustBuild
# 13-14 min for javadoc; JDK version must be synced with nb-javac
- name: Set up JDK 24-ea for javadoc
if: env.test_javadoc == 'true' && success()
uses: actions/setup-java@v4
with:
java-version: 24-ea
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Build javadoc
if: env.test_javadoc == 'true' && success()
run: ant $OPTS build-javadoc
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
build-from-src-zip:
name: Build ${{ matrix.config }} from src.zip on JDK ${{ matrix.java }}
# equals env.test_platform == 'true' || test_vscode_extension == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'VSCode Extension') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
config: [ 'platform', 'release' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: Restoring Cache
uses: actions/cache/restore@v4
with:
path: ~/.hgexternalcache
key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
restore-keys: ${{ runner.os }}-
- name: Create ${{ matrix.config }}-src zip
run: ant $OPTS -quiet build-source-config -Dcluster.config=${{ matrix.config }}
- name: Extract ${{ matrix.config }}-src zip
run: |
mkdir tmpbuild && cd tmpbuild
unzip -qq ../nbbuild/build/${{ matrix.config }}-src*
- name: Build from ${{ matrix.config }}-src zip
run: |
cd tmpbuild
ant $OPTS -quiet build -Dcluster.config=${{ matrix.config }}
# extra round for VSCodeExt which is built with 'release' config
- name: Set up node
if: ${{ (matrix.config == 'release') && success() }}
uses: actions/setup-node@v4
with:
node-version: 18
- name: Build NBVSCodeExt from ${{ matrix.config }}-src zip
if: ${{ (matrix.config == 'release') && success() }}
run: |
cd tmpbuild/java/java.lsp.server
ant $OPTS build-vscode-ext -D3rdparty.modules=.*externalcodeformatter.*
ide-modules-test:
name: IDE Modules on Linux/JDK ${{ matrix.java }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: apisupport.project
run: ant $OPTS -f apisupport/apisupport.project test
- name: apisupport.refactoring
run: ant $OPTS -f apisupport/apisupport.refactoring test
- name: apisupport.wizards
run: ant $OPTS -f apisupport/apisupport.wizards test
- name: timers
run: ant $OPTS -f apisupport/timers test
- name: ide/api.xml
run: ant $OPTS -f ide/api.xml test
- name: ide/api.xml.ui
run: ant $OPTS -f ide/api.xml.ui test
- name: ide/bugtracking
run: .github/retry.sh ant $OPTS -f ide/bugtracking test
- name: ide/bugtracking.bridge
run: .github/retry.sh ant $OPTS -f ide/bugtracking.bridge test
- name: ide/bugtracking.commons
run: ant $OPTS -f ide/bugtracking.commons test
# - name: ide/bugzilla
# run: ant $OPTS -f ide/bugzilla test
- name: ide/code.analysis
run: ant $OPTS -f ide/code.analysis test
- name: ide/core.ide
run: ant $OPTS -f ide/core.ide test
- name: ide/db
run: .github/retry.sh ant $OPTS -f ide/db test
- name: ide/db.dataview
run: ant $OPTS -f ide/db.dataview test
- name: ide/db.sql.editor
run: ant $OPTS -f ide/db.sql.editor test
- name: ide/docker.api
run: ant $OPTS -f ide/docker.api test
- name: ide/docker.ui
run: ant $OPTS -f ide/docker.ui test
- name: ide/editor.bookmarks
run: ant $OPTS -f ide/editor.bookmarks test
# - name: ide/editor.bracesmatching
# run: ant $OPTS -f ide/editor.bracesmatching test
- name: ide/editor.document
run: ant $OPTS -f ide/editor.document test
- name: ide/editor.fold
run: ant $OPTS -f ide/editor.fold test
- name: ide/editor.fold.nbui
run: ant $OPTS -f ide/editor.fold.nbui test
- name: ide/editor.guards
run: ant $OPTS -f ide/editor.guards test
- name: ide/editor.indent
run: ant $OPTS -f ide/editor.indent test
- name: ide/editor.indent.project
run: ant $OPTS -f ide/editor.indent.project test
- name: ide/editor.macros
run: ant $OPTS -f ide/editor.macros test
- name: ide/editor.search
run: ant $OPTS -f ide/editor.search test
- name: ide/editor.settings
run: ant $OPTS -f ide/editor.settings test
- name: ide/editor.settings.storage
run: .github/retry.sh ant $OPTS -f ide/editor.settings.storage test
- name: ide/editor.structure
run: ant $OPTS -f ide/editor.structure test
- name: ide/editor.tools.storage
run: ant $OPTS -f ide/editor.tools.storage test
- name: ide/editor.util
run: ant $OPTS -f ide/editor.util test
- name: ide/extbrowser
run: ant $OPTS -f ide/extbrowser test
- name: ide/extexecution.base
run: ant $OPTS -f ide/extexecution.base test
- name: ide/gsf.testrunner.ui
run: ant $OPTS -f ide/gsf.testrunner.ui test
- name: ide/httpserver
run: ant $OPTS -f ide/httpserver test
- name: ide/hudson
run: ant $OPTS -f ide/hudson test
- name: ide/hudson.git
run: ant $OPTS -f ide/hudson.git test
- name: ide/hudson.mercurial
run: ant $OPTS -f ide/hudson.mercurial test
- name: ide/hudson.subversion
run: ant $OPTS -f ide/hudson.subversion test
- name: ide/hudson.tasklist
run: ant $OPTS -f ide/hudson.tasklist test
- name: ide/hudson.ui
run: ant $OPTS -f ide/hudson.ui test
- name: ide/javascript2.debug
run: ant $OPTS -f ide/javascript2.debug test
- name: ide/languages.hcl
run: ant $OPTS -f ide/languages.hcl test
- name: ide/languages.toml
run: ant $OPTS -f ide/languages.toml test
- name: ide/languages.yaml
run: ant $OPTS -f ide/languages.yaml test
- name: ide/lexer
run: ant $OPTS -f ide/lexer test
- name: ide/lexer.antlr4
run: ant $OPTS -f ide/lexer.antlr4 test
- name: ide/lib.terminalemulator
run: ant $OPTS -f ide/lib.terminalemulator test
- name: ide/libs.freemarker
run: ant $OPTS -f ide/libs.freemarker test
- name: ide/libs.graalsdk
run: ant $OPTS -f ide/libs.graalsdk test
# - name: ide/localhistory
# run: ant $OPTS -f ide/localhistory test
- name: ide/libs.truffleapi
run: ant $OPTS -f ide/libs.truffleapi test
- name: ide/notifications
run: .github/retry.sh ant $OPTS -f ide/notifications test
- name: ide/o.openidex.util
run: ant $OPTS -f ide/o.openidex.util test
- name: ide/options.editor
run: .github/retry.sh ant $OPTS -f ide/options.editor test
# - name: ide/parsing.api
# run: ant $OPTS -f ide/parsing.api test
# - name: ide/parsing.indexing
# run: ant $OPTS -f ide/parsing.indexing test
- name: ide/parsing.lucene
run: ant $OPTS -f ide/parsing.lucene test
- name: ide/project.libraries
run: ant $OPTS -f ide/project.libraries test
- name: ide/project.libraries.ui
run: ant $OPTS -f ide/project.libraries.ui test
- name: ide/projectapi
run: ant $OPTS -f ide/projectapi test
- name: ide/projectapi.nb
run: ant $OPTS -f ide/projectapi.nb test
- name: ide/projectuiapi.base
run: ant $OPTS -f ide/projectuiapi.base test
- name: ide/refactoring.api
run: ant $OPTS -f ide/refactoring.api test
- name: ide/schema2beans
run: ant $OPTS -f ide/schema2beans test
- name: ide/server
run: ant $OPTS -f ide/server test
- name: ide/spellchecker
run: ant $OPTS -f ide/spellchecker test
- name: ide/spi.editor.hints
run: ant $OPTS -f ide/spi.editor.hints test
# - name: ide/spi.palette
# run: ant $OPTS -f ide/spi.palette test
- name: ide/spi.tasklist
run: ant $OPTS -f ide/spi.tasklist test
- name: ide/tasklist.ui
run: ant $OPTS -f ide/tasklist.ui test
- name: ide/team.commons
run: ant $OPTS -f ide/team.commons test
- name: ide/terminal.nb
run: ant $OPTS -f ide/terminal.nb test
- name: ide/utilities
run: ant $OPTS -f ide/utilities test
- name: ide/web.common
run: ant $OPTS -f ide/web.common test
- name: ide/web.common.ui
run: ant $OPTS -f ide/web.common.ui test
- name: ide/web.webkit.debugging
run: ant $OPTS -f ide/web.webkit.debugging test
- name: ide/xml
run: ant $OPTS -f ide/xml test
- name: ide/xml.axi
run: ant $OPTS -f ide/xml.axi test
- name: ide/xml.catalog
run: ant $OPTS -f ide/xml.catalog test-unit
- name: ide/xml.core
run: ant $OPTS -f ide/xml.core test
- name: ide/xml.lexer
run: ant $OPTS -f ide/xml.lexer test
- name: ide/xml.multiview
run: ant $OPTS -f ide/xml.multiview test
- name: ide/xml.retriever
run: ant $OPTS -f ide/xml.retriever test
- name: ide/xml.schema.completion
run: ant $OPTS -f ide/xml.schema.completion test
- name: ide/xml.schema.model
run: ant $OPTS -f ide/xml.schema.model test
- name: ide/xml.text
run: ant $OPTS -f ide/xml.text test
- name: ide/xml.text.obsolete90
run: ant $OPTS -f ide/xml.text.obsolete90 test
- name: ide/xml.wsdl.model
run: .github/retry.sh ant $OPTS -f ide/xml.wsdl.model test
- name: ide/xml.xam
run: ant $OPTS -f ide/xml.xam test
- name: ide/xml.xdm
run: ant $OPTS -f ide/xml.xdm test
- name: ide/xsl
run: ant $OPTS -f ide/xsl test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
build-tools:
name: Build-Tools on Linux/JDK ${{ matrix.java }}
# label triggers: Ant, Gradle, Maven, MX
if: ${{ contains(github.event.pull_request.labels.*.name, 'Ant') || contains(github.event.pull_request.labels.*.name, 'Gradle') || contains(github.event.pull_request.labels.*.name, 'Maven') || contains(github.event.pull_request.labels.*.name, 'MX') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 50
strategy:
matrix:
java: [ '17', '21', '24-ea' ]
exclude:
- java: ${{ github.event_name == 'pull_request' && 'nothing' || '21' }}
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: java/maven
run: ant $OPTS -f java/maven test
- name: java/maven.embedder
run: ant $OPTS -f java/maven.embedder test
- name: java/maven.grammar
run: ant $OPTS -f java/maven.grammar test
- name: java/maven.hints
run: ant $OPTS -f java/maven.hints test
# - name: java/maven.htmlui
# run: ant $OPTS -f java/maven.htmlui test
- name: java/maven.indexer
run: ant $OPTS -f java/maven.indexer test
- name: java/maven.refactoring
run: ant $OPTS -f java/maven.refactoring test
- name: java/maven.junit
run: ant $OPTS -f java/maven.junit test
- name: java/maven.model
run: ant $OPTS -f java/maven.model test
- name: java/maven.osgi
run: ant $OPTS -f java/maven.osgi test
- name: java/api.maven
run: ant $OPTS -f java/api.maven test
- name: maven.apisupport
run: ant $OPTS -f apisupport/maven.apisupport test
- name: java/hudson.maven
run: ant $OPTS -f java/hudson.maven test
- name: ide/project.ant
run: ant $OPTS -f ide/project.ant test
- name: ide/project.ant.compat8
run: ant $OPTS -f ide/project.ant.compat8 test
- name: ide/project.ant.ui
run: ant $OPTS -f ide/project.ant.ui test
# - name: java/ant.debugger
# run: ant $OPTS -f java/ant.debugger test
- name: java/ant.freeform
run: ant $OPTS -f java/ant.freeform test
# - name: java/ant.grammar
# run: ant $OPTS -f java/ant.grammar test
# TODO next are JDK 21+ incompatibe steps
- name: java/java.mx.project
if: ${{ matrix.java == '17' }}
run: .github/retry.sh ant $OPTS -f java/java.mx.project test
- name: java/gradle.java
if: ${{ matrix.java == '17' }}
run: .github/retry.sh ant $OPTS -f java/gradle.java test
- name: extide/gradle
if: ${{ matrix.java == '17' }}
run: ant $OPTS -f extide/gradle test
- name: java/gradle.dependencies
if: ${{ matrix.java == '17' }}
run: ant $OPTS -f java/gradle.dependencies test
- name: extide/o.apache.tools.ant.module
if: ${{ matrix.java == '17' }}
run: ant $OPTS -f extide/o.apache.tools.ant.module test
- name: apisupport.ant
if: ${{ matrix.java == '17' }}
run: ant $OPTS -f apisupport/apisupport.ant test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
platform-modules-test1:
name: Platform Modules batch1 on Linux/JDK ${{ matrix.java }} (some on 8)
# equals env.test_platform == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: platform/api.htmlui
run: .github/retry.sh ant $OPTS -f platform/api.htmlui test
- name: platform/htmlui
run: .github/retry.sh ant $OPTS -f platform/htmlui test
- name: platform/api.intent
run: ant $OPTS -f platform/api.intent test
- name: platform/api.io
run: ant $OPTS -f platform/api.io test
- name: platform/api.progress
run: ant $OPTS -f platform/api.progress test
- name: platform/api.progress.nb
run: ant $OPTS -f platform/api.progress.nb test
- name: platform/api.scripting
run: ant $OPTS -f platform/api.scripting test
- name: platform/api.search
run: ant $OPTS -f platform/api.search test
- name: platform/api.visual
run: ant $OPTS -f platform/api.visual test
- name: platform/applemenu
run: ant $OPTS -f platform/applemenu test
- name: platform/autoupdate.cli
run: ant $OPTS -f platform/autoupdate.cli test
- name: platform/autoupdate.services
run: ant $OPTS -f platform/autoupdate.services test
- name: platform/autoupdate.ui
run: ant $OPTS -f platform/autoupdate.ui test
- name: platform/core.execution
run: ant $OPTS -f platform/core.execution test
- name: platform/core.io.ui
run: ant $OPTS -f platform/core.io.ui test
- name: platform/core.kit
run: ant $OPTS -f platform/core.kit test
- name: platform/core.multiview
run: ant $OPTS -f platform/core.multiview test
- name: platform/core.netigso
run: ant $OPTS -f platform/core.netigso test
- name: platform/core.osgi
run: ant $OPTS -f platform/core.osgi test
- name: platform/core.output2
run: ant $OPTS -f platform/core.output2 test
- name: platform/core.startup
run: .github/retry.sh ant $OPTS -f platform/core.startup test
- name: platform/core.startup.base
run: ant $OPTS -f platform/core.startup.base test
- name: platform/core.ui
run: ant $OPTS -f platform/core.ui test
- name: platform/core.windows
run: .github/retry.sh ant $OPTS -f platform/core.windows test
- name: platform/editor.mimelookup
run: ant $OPTS -f platform/editor.mimelookup test
- name: platform/editor.mimelookup.impl
run: ant $OPTS -f platform/editor.mimelookup.impl test
- name: platform/favorites
run: .github/retry.sh ant $OPTS -f platform/favorites test
- name: platform/javahelp
run: ant $OPTS -f platform/javahelp test-unit
- name: platform/keyring.fallback
run: ant $OPTS -f platform/keyring.fallback test
- name: platform/keyring.impl
run: ant $OPTS -f platform/keyring.impl test
- name: platform/libs.junit4
run: ant $OPTS -f platform/libs.junit4 test
- name: platform/o.n.core
run: ant $OPTS -f platform/o.n.core test-unit
- name: platform/o.n.swing.outline
run: ant $OPTS -f platform/o.n.swing.outline test
- name: platform/o.n.swing.tabcontrol
run: ant $OPTS -f platform/o.n.swing.tabcontrol test
- name: platform/lib.uihandler
run: .github/retry.sh ant $OPTS -f platform/lib.uihandler test
- name: platform/openide.text
run: .github/retry.sh ant $OPTS -f platform/openide.text test
- name: platform/openide.util.ui
run: ant $OPTS -f platform/openide.util.ui test
# isolation required by netbinox tests
- name: isolate platform build
run: |
cp -r platform/ _platform/ && cp -r harness/ _harness/ && cp nbbuild/build/nbantext.jar .
cp -r nbbuild/netbeans/platform/ _nb_platform/ && cp -r nbbuild/netbeans/harness/ _nb_harness/
ant $OPTS -quiet clean && rm -Rf platform/ && rm -Rf harness/
mkdir nbbuild/build && mkdir nbbuild/netbeans
mv _platform/ platform/ && mv _harness/ harness/ && mv nbantext.jar nbbuild/build/
mv _nb_platform/ nbbuild/netbeans/platform/ && mv _nb_harness/ nbbuild/netbeans/harness/
- name: platform/netbinox
run: ant $OPTS -f platform/netbinox test -Dtest.config=stableBTD
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
platform-modules-test2:
name: Platform Modules batch2 on Linux/JDK ${{ matrix.java }}
# equals env.test_platform == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Platform') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 90
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: platform/openide.actions
run: ant $OPTS -f platform/openide.actions test
- name: platform/openide.awt
run: ant $OPTS -f platform/openide.awt test
- name: platform/openide.compat
run: ant $OPTS -f platform/openide.compat test
- name: platform/openide.dialogs
run: ant $OPTS -f platform/openide.dialogs test
- name: platform/openide.execution
run: ant $OPTS -f platform/openide.execution test
- name: platform/openide.execution.compat8
run: ant $OPTS -f platform/openide.execution.compat8 test
- name: platform/openide.explorer
run: .github/retry.sh ant $OPTS -f platform/openide.explorer test
- name: platform/openide.filesystems
run: ant $OPTS -f platform/openide.filesystems test
- name: platform/openide.filesystems.compat8
run: ant $OPTS -f platform/openide.filesystems.compat8 test
- name: platform/openide.filesystems.nb
run: ant $OPTS -f platform/openide.filesystems.nb test
- name: platform/openide.io
run: ant $OPTS -f platform/openide.io test
- name: platform/openide.loaders
run: ant $OPTS -f platform/openide.loaders test
- name: platform/openide.modules
run: ant $OPTS -f platform/openide.modules test
- name: platform/openide.nodes
run: ant $OPTS -f platform/openide.nodes test
- name: platform/openide.options
run: ant $OPTS -f platform/openide.options test
- name: platform/openide.util
run: ant $OPTS -f platform/openide.util test
- name: platform/openide.util.lookup
run: ant $OPTS -f platform/openide.util.lookup test
- name: platform/openide.windows
run: ant $OPTS -f platform/openide.windows test
- name: platform/options.api
run: ant $OPTS -f platform/options.api test-unit
- name: platform/options.keymap
run: ant $OPTS -f platform/options.keymap test
- name: platform/print
run: ant $OPTS -f platform/print test
- name: platform/progress.ui
run: ant $OPTS -f platform/progress.ui test
- name: platform/queries
run: ant $OPTS -f platform/queries test
- name: platform/sampler
run: ant $OPTS -f platform/sampler test
- name: platform/sendopts
run: ant $OPTS -f platform/sendopts test
- name: platform/settings
run: .github/retry.sh ant $OPTS -f platform/settings test
- name: platform/spi.actions
run: ant $OPTS -f platform/spi.actions test
- name: platform/spi.quicksearch
run: ant $OPTS -f platform/spi.quicksearch test
- name: platform/templatesui
run: ant $OPTS -f platform/templatesui test
- name: platform/uihandler
run: .github/retry.sh ant $OPTS -f platform/uihandler test
- name: platform/o.n.bootstrap
run: ant $OPTS -f platform/o.n.bootstrap test
- name: platform/templates
run: ant $OPTS -f platform/templates test
- name: platform/api.templates
run: ant $OPTS -f platform/api.templates test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
java-modules-test:
name: Java Modules on Linux/JDK ${{ matrix.java }}
# equals env.test_java == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Java') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 100
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: api.java
run: ant $OPTS -f java/api.java test
# - name: beans
# run: ant $OPTS -f java/beans test
- name: classfile
run: ant $OPTS -f java/classfile test
- name: dbschema
run: ant $OPTS -f java/dbschema test -Dtest.config=stable
- name: editor.htmlui
run: ant $OPTS -f java/editor.htmlui test
- name: java.completion
run: ant $OPTS -f java/java.completion test
- name: java.editor.base
run: ant $OPTS -f java/java.editor.base test
- name: java.editor
run: .github/retry.sh ant $OPTS -f java/java.editor test-unit
- name: java.freeform
run: ant $OPTS -f java/java.freeform test
- name: java.file.launcher
run: ant $OPTS -f java/java.file.launcher test
# - name: java.kit
# run: ant $OPTS -f java/java.kit test
# - name: java.metrics
# run: ant $OPTS -f java/java.metrics test
- name: java.module.graph
run: ant $OPTS -f java/java.module.graph test
- name: java.navigation
run: ant $OPTS -f java/java.navigation test
- name: java.openjdk.project
run: ant $OPTS -f java/java.openjdk.project test
- name: java.platform
run: ant $OPTS -f java/java.platform test
- name: java.platform.ui
run: ant $OPTS -f java/java.platform.ui test
- name: java.preprocessorbridge
run: ant $OPTS -f java/java.preprocessorbridge test
- name: java.project
run: ant $OPTS -f java/java.project test
# - name: java.project.ui
# run: ant $OPTS -f java/java.project.ui test
- name: java.source
run: ant $OPTS -f java/java.source test-unit
# - name: java.source.ant
# run: ant $OPTS -f java/java.source.ant test
- name: java.source.base
run: ant $OPTS -f java/java.source.base test
- name: java.source.compat8
run: ant $OPTS -f java/java.source.compat8 test
- name: java.source.queriesimpl
run: ant $OPTS -f java/java.source.queriesimpl test
- name: java.sourceui
run: ant $OPTS -f java/java.sourceui test
- name: java.testrunner
run: ant $OPTS -f java/java.testrunner test
- name: java.testrunner.ant
run: ant $OPTS -f java/java.testrunner.ant test
# - name: javawebstart
# run: ant $OPTS -f java/javawebstart test
# - name: jellytools.java
# run: ant $OPTS -f java/jellytools.java test
- name: jshell.support
run: ant $OPTS -f java/jshell.support test
- name: junit
run: ant $OPTS -f java/junit test-unit
- name: junit.ant.ui
run: ant $OPTS -f java/junit.ant.ui test
- name: lib.nbjavac
run: ant $OPTS -f java/lib.nbjavac test
- name: libs.nbjavacapi
run: ant $OPTS -f java/libs.nbjavacapi test
# - name: performance
# run: ant $OPTS -f java/performance test
# - name: performance.java
# run: ant $OPTS -f java/performance.java test
# - name: projectimport.eclipse.core
# run: ant $OPTS -f java/projectimport.eclipse.core test
- name: spellchecker.bindings.java
run: ant $OPTS -f java/spellchecker.bindings.java test
- name: testng
run: ant $OPTS -f java/testng test
# - name: testng.ant
# run: ant $OPTS -f java/testng.ant test
# - name: testng.ui
# run: ant $OPTS -f java/testng.ui test
- name: whitelist
run: ant $OPTS -f java/whitelist test
- name: xml.jaxb
run: ant $OPTS -f java/xml.jaxb test
- name: java.lexer
run: ant $OPTS -f java/java.lexer test
- name: refactoring.java
run: ant $OPTS -f java/refactoring.java test-unit
- name: form
run: ant $OPTS -f java/form test-unit
- name: javadoc
run: ant $OPTS -f java/javadoc test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
java-hints-test:
name: Java Hints ${{ matrix.config }} on Linux/JDK ${{ matrix.java }}
# equals env.test_java == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Java') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17', '23' ]
config: [ 'batch1', 'batch2' ]
exclude:
- java: ${{ github.event_name == 'pull_request' && 'nothing' || '23' }}
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: java.hints ${{ matrix.config }}
run: ant $OPTS -Dtest.config=${{ matrix.config }} -f java/java.hints test
- name: java.hints.declarative
if: ${{ (matrix.config == 'batch2') && success() }}
run: ant $OPTS -f java/java.hints.declarative test
- name: spi.java.hints
if: ${{ (matrix.config == 'batch2') && success() }}
run: ant $OPTS -f java/spi.java.hints test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
java-debugger-test:
name: Java Debugger tests on Linux/JDK ${{ matrix.java }}
# equals env.test_java == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Java') || contains(github.event.pull_request.labels.*.name, 'debugger') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17', '21', '24-ea' ]
exclude:
- java: ${{ github.event_name == 'pull_request' && 'nothing' || '21' }}
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: api.debugger.jpda
run: ant $OPTS -f java/api.debugger.jpda test
- name: debugger.jpda
run: .github/retry.sh ant $OPTS -f java/debugger.jpda test
- name: debugger.jpda.js
run: ant $OPTS -f java/debugger.jpda.js test
- name: debugger.jpda.projects
run: .github/retry.sh ant $OPTS -f java/debugger.jpda.projects test
- name: debugger.jpda.projectsui
run: ant $OPTS -f java/debugger.jpda.projectsui test
# - name: debugger.jpda.truffle
# run: ant $OPTS -f java/debugger.jpda.truffle test
# - name: debugger.jpda.ui
# run: ant $OPTS -f java/debugger.jpda.ui test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
profiler-test:
name: Profiler on Linux/JDK ${{ matrix.java }}
# equals env.test_java == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Java') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: profiler
run: ant $OPTS -f profiler/profiler test-unit
- name: profiler.oql
run: ant $OPTS -f profiler/profiler.oql test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
webcommon-test:
name: Web Modules on Linux/JDK ${{ matrix.java }}
# equals env.test_web == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'JavaScript') || contains(github.event.pull_request.labels.*.name, 'TypeScript') || contains(github.event.pull_request.labels.*.name, 'HTML') || contains(github.event.pull_request.labels.*.name, 'CSS') || contains(github.event.pull_request.labels.*.name, 'CSL') || contains(github.event.pull_request.labels.*.name, 'web') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: ide/csl.api
run: ant $OPTS -f ide/csl.api test
- name: ide/csl.types
run: ant $OPTS -f ide/csl.types test
- name: ide/css.editor
run: ant $OPTS -f ide/css.editor test
- name: ide/css.lib
run: ant $OPTS -f ide/css.lib test
- name: ide/css.model
run: ant $OPTS -f ide/css.model test
- name: ide/html
run: .github/retry.sh ant $OPTS -f ide/html test
- name: ide/html.custom
run: ant $OPTS -f ide/html.custom test
- name: ide/html.editor
run: ant $OPTS -f ide/html.editor test
- name: ide/html.editor
run: ant $OPTS -f ide/html.editor.lib test
- name: ide/html.lexer
run: ant $OPTS -f ide/html.lexer test
- name: ide/html.parser
run: ant $OPTS -f ide/html.parser test
- name: ide/html.validation
run: ant $OPTS -f ide/html.validation test
# - name: webcommon/cordova
# run: ant $OPTS -f webcommon/cordova test
- name: webcommon/html.angular
run: ant $OPTS -f webcommon/html.angular test-unit
- name: webcommon/html.knockout
run: ant $OPTS -f webcommon/html.knockout test-unit
- name: webcommon/javascript.bower
run: ant $OPTS -f webcommon/javascript.bower test
- name: webcommon/javascript.cdnjs
run: ant $OPTS -f webcommon/javascript.cdnjs test
- name: webcommon/javascript.grunt
run: ant $OPTS -f webcommon/javascript.grunt test
- name: webcommon/javascript.karma
run: ant $OPTS -f webcommon/javascript.karma test
- name: webcommon/javascript.nodejs
run: ant $OPTS -f webcommon/javascript.nodejs test
- name: webcommon/javascript.v8debug
run: ant $OPTS -f webcommon/javascript.v8debug test
- name: webcommon/javascript2.doc
run: ant $OPTS -f webcommon/javascript2.doc test
- name: webcommon/javascript2.editor
if: env.test_javascript == 'true' && success()
run: ant $OPTS -f webcommon/javascript2.editor test-unit
- name: webcommon/javascript2.extdoc
run: ant $OPTS -f webcommon/javascript2.extdoc test
- name: webcommon/javascript2.extjs
run: ant $OPTS -f webcommon/javascript2.extjs test
- name: webcommon/javascript2.jade
run: ant $OPTS -f webcommon/javascript2.jade test
- name: webcommon/javascript2.jquery
run: .github/retry.sh ant $OPTS -f webcommon/javascript2.jquery test
- name: webcommon/javascript2.jsdoc
run: ant $OPTS -f webcommon/javascript2.jsdoc test
- name: webcommon/javascript2.json
run: ant $OPTS -f webcommon/javascript2.json test
- name: webcommon/javascript2.knockout
run: ant $OPTS -f webcommon/javascript2.knockout test
- name: webcommon/javascript2.lexer
run: ant $OPTS -f webcommon/javascript2.lexer test
- name: webcommon/javascript2.model
run: ant $OPTS -f webcommon/javascript2.model test
- name: webcommon/javascript2.nodejs
run: ant $OPTS -f webcommon/javascript2.nodejs test-unit
- name: webcommon/javascript2.prototypejs
run: ant $OPTS -f webcommon/javascript2.prototypejs test
- name: webcommon/javascript2.requirejs
run: ant $OPTS -f webcommon/javascript2.requirejs test-unit
- name: webcommon/javascript2.sdoc
run: ant $OPTS -f webcommon/javascript2.sdoc test
- name: webcommon/languages.apacheconf
run: ant $OPTS -f webcommon/languages.apacheconf test
- name: webcommon/languages.ini
run: ant $OPTS -f webcommon/languages.ini test
# - name: webcommon/lib.v8debug
# run: ant $OPTS -f webcommon/lib.v8debug test
- name: webcommon/libs.graaljs
run: ant $OPTS -f webcommon/libs.graaljs test
- name: webcommon/selenium2.webclient
run: ant $OPTS -f webcommon/selenium2.webclient test
- name: webcommon/web.clientproject
run: ant $OPTS -f webcommon/web.clientproject test-unit
- name: webcommon/web.clientproject.api
run: ant $OPTS -f webcommon/web.clientproject.api test
- name: webcommon/web.inspect
run: ant $OPTS -f webcommon/web.inspect test
- name: webcommon/api.knockout
run: ant $OPTS -f webcommon/api.knockout test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
javafx-test:
name: JavaFX on Linux/JDK ${{ matrix.java }}
# equals env.test_javafx == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'JavaFX') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: platform/libs.javafx
run: ant $OPTS -f platform/libs.javafx test
- name: javafx2.editor
run: ant $OPTS -f javafx/javafx2.editor test -Dtest.config=stable
# - name: javafx2.project
# run: ant $OPTS -f javafx/javafx2.project test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
groovy-test:
name: Groovy on Linux/JDK ${{ matrix.java }}
# equals env.test_groovy == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Groovy') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: groovy/groovy.editor
run: ant $OPTS -f groovy/groovy.editor test
- name: groovy/groovy.gsp
run: ant $OPTS -f groovy/groovy.gsp test
- name: groovy/groovy.support
run: ant $OPTS -f groovy/groovy.support test
# - name: groovy/groovy.kit
# run: ant $OPTS -f groovy/groovy.kit test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
rust-test:
name: Rust on Linux/JDK ${{ matrix.java }}
# equals env.test_rust == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Rust') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: rust/rust.cargo
run: ant $OPTS -f rust/rust.cargo test
- name: rust/rust.grammar
run: ant $OPTS -f rust/rust.grammar test
- name: rust/rust.options
run: ant $OPTS -f rust/rust.options test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
enterprise-test:
name: Enterprise on Linux/JDK ${{ matrix.java }}
# equals env.test_enterprise == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Java EE/Jakarta EE') || contains(github.event.pull_request.labels.*.name, 'Micronaut') || contains(github.event.pull_request.labels.*.name, 'enterprise') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: micronaut
run: .github/retry.sh ant $OPTS -f enterprise/micronaut test
- name: api.web.webmodule
run: ant $OPTS -f enterprise/api.web.webmodule test
- name: cloud.amazon
run: ant $OPTS -f enterprise/cloud.amazon test
- name: cloud.oracle
run: ant $OPTS -f enterprise/cloud.oracle test
- name: el.lexer
run: ant $OPTS -f enterprise/el.lexer test
- name: glassfish.common
run: ant $OPTS -f enterprise/glassfish.common test
# TODO failing tests commented out
# Fails
# - name: glassfish.javaee
# run: ant $OPTS -f enterprise/glassfish.javaee test
# Fails
# - name: glassfish.tooling
# run: ant $OPTS -f enterprise/glassfish.tooling test
- name: j2ee.api.ejbmodule
run: ant $OPTS -f enterprise/j2ee.api.ejbmodule test
- name: j2ee.clientproject
run: ant $OPTS -f enterprise/j2ee.clientproject test
- name: j2ee.common
run: ant $OPTS -f enterprise/j2ee.common test
- name: j2ee.core
run: ant $OPTS -f enterprise/j2ee.core test
# Fails
# - name: j2ee.dd
# run: ant $OPTS -f enterprise/j2ee.dd test
- name: j2ee.ddloaders
run: ant $OPTS -f enterprise/j2ee.ddloaders test
# Fails + Slow
# - name: j2ee.ejbjarproject
# run: ant $OPTS -f enterprise/j2ee.ejbjarproject test
# Fails
# - name: j2ee.ejbverification
# run: ant $OPTS -f enterprise/j2ee.ejbverification test
- name: j2ee.persistence
run: ant $OPTS -f java/j2ee.persistence test
# Fails
# - name: j2eeserver
# run: ant $OPTS -f enterprise/j2eeserver test
- name: j2ee.sun.appsrv
run: ant $OPTS -f enterprise/j2ee.sun.appsrv test
- name: j2ee.sun.dd
run: ant $OPTS -f enterprise/j2ee.sun.dd test
# Fails
# - name: j2ee.sun.ddui
# run: ant $OPTS -f enterprise/j2ee.sun.ddui test
# Fails + Slow
# - name: jakarta.web.beans
# run: ant $OPTS -f enterprise/jakarta.web.beans test
- name: javaee.wildfly
run: .github/retry.sh ant $OPTS -f enterprise/javaee.wildfly test
# Fails + Slow
# - name: jellytools.enterprise
# run: ant $OPTS -f enterprise/jellytools.enterprise test
- name: jsp.lexer
run: ant $OPTS -f enterprise/jsp.lexer test
- name: maven.j2ee
run: ant $OPTS -f enterprise/maven.j2ee test
# Fails
# - name: enterpirse/payara.common
# run: ant $OPTS -f enterprise/payara.common test
# Fails
# - name: enterpirse/payara.eecommon
# run: ant $OPTS -f enterprise/payara.eecommon test
# Fails
# - name: enterpirse/payara.jakartaee
# run: ant $OPTS -f enterprise/payara.jakartaee test
# Fails
# - name: enterpirse/payara.tooling
# run: ant $OPTS -f enterprise/payara.tooling test
- name: profiler.j2ee
run: ant $OPTS -f enterprise/profiler.j2ee test
- name: spring.webmvc
run: ant $OPTS -f enterprise/spring.webmvc test
- name: spring.beans
run: ant $OPTS -f java/spring.beans test
- name: tomcat5
run: ant $OPTS -f enterprise/tomcat5 test
# Fails
# - name: web.beans
# run: ant $OPTS -f enterprise/web.beans test
# Fails + Slow
# - name: web.core.syntax
# run: ant $OPTS -f enterprise/web.core.syntax test
# Fails + Slow
# - name: web.debug
# run: ant $OPTS -f enterprise/web.debug test
# Fails
# - name: web.el
# run: ant $OPTS -f enterprise/web.el test
# Fails
# - name: web.freeform
# run: ant $OPTS -f enterprise/web.freeform test
# Fails
# - name: web.jsf.editor
# run: ant $OPTS -f enterprise/web.jsf.editor test
# Fails
# - name: web.jsf.navigation
# run: ant $OPTS -f enterprise/web.jsf.navigation test
- name: web.jsf
run: ant $OPTS -f enterprise/web.jsf test
- name: web.jsfapi
run: ant $OPTS -f enterprise/web.jsfapi test
- name: web.jspparser
run: ant $OPTS -f enterprise/web.jspparser test
# Fails
# - name: web.project
# run: ant $OPTS -f enterprise/web.project test
- name: websvc.clientapi
run: ant $OPTS -f enterprise/websvc.clientapi test
# Fails
# - name: websvc.customization
# run: ant $OPTS -f enterprise/websvc.customization test
# Fails
# - name: websvc.design
# run: ant $OPTS -f enterprise/websvc.design test
- name: websvc.jaxwsapi
run: ant $OPTS -f enterprise/websvc.jaxwsapi test
# Fails
# - name: websvc.jaxwsmodel
# run: ant $OPTS -f enterprise/websvc.jaxwsmodel test
# Fails + Slow
# - name: websvc.kit
# run: ant $OPTS -f enterprise/websvc.kit test
# Fails
# - name: websvc.manager
# run: ant $OPTS -f enterprise/websvc.manager test
- name: websvc.projectapi
run: ant $OPTS -f enterprise/websvc.projectapi test
- name: websvc.rest
run: ant $OPTS -f enterprise/websvc.rest test
# Fails + Slow
# - name: websvc.restkit
# run: ant $OPTS -f enterprise/websvc.restkit test
# Fails
# - name: websvc.utilities
# run: ant $OPTS -f enterprise/websvc.utilities test
- name: websvc.websvcapi
run: ant $OPTS -f enterprise/websvc.websvcapi test
- name: websvc.wsstackapi
run: ant $OPTS -f enterprise/websvc.wsstackapi test
# TODO fails on JDK11+ (#4904)
# - name: websvc.editor.hints
# run: ant $OPTS -f enterprise/websvc.editor.hints test
- name: j2ee.dd.webservice
run: ant $OPTS -f enterprise/j2ee.dd.webservice test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
versioning-test:
name: Versioning Modules on Linux/JDK ${{ matrix.java }}
# equals env.test_versioning == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'git') || contains(github.event.pull_request.labels.*.name, 'subversion') || contains(github.event.pull_request.labels.*.name, 'mercurial') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: Setup Env
run: echo "GIT_TEST_REPO=$HOME/git_test_repo" >> $GITHUB_ENV
- name: ide/git
run: .github/retry.sh ant $OPTS -f ide/git test-unit
- name: ide/libs.git
run: .github/retry.sh ant $OPTS -f ide/libs.git test
- name: ide/versioning.masterfs
run: ant $OPTS -f ide/versioning.masterfs test
- name: ide/versioning.ui
run: ant $OPTS -f ide/versioning.ui test
- name: ide/versioning.util
run: ant $OPTS -f ide/versioning.util test
- name: ide/versioning.core
run: ant $OPTS -f ide/versioning.core test-unit
- name: ide/versioning
run: ant $OPTS -f ide/versioning test-unit
- name: ide/versioning.core test-qa-functional
run: |
#Prepare git repo for tests
git init $GIT_TEST_REPO
# Prepare config file for ide/versioning.core module
touch ide/versioning.core/test/qa-functional/data/tck.properties
echo "test.root = $GIT_TEST_REPO" > ide/versioning.core/test/qa-functional/data/tck.properties
echo "test.vcs = org.netbeans.modules.versioning.DelegatingVCS" >> ide/versioning.core/test/qa-functional/data/tck.properties
# Run functional tests for ide/versioning.core module
ant $OPTS -f ide/versioning.core test-qa-functional
- name: ide/versioning test-qa-functional
run: |
# Prepare config file for ide/versioning module
touch ide/versioning/test/qa-functional/data/tck.properties
echo "test.root = $GIT_TEST_REPO" > ide/versioning/test/qa-functional/data/tck.properties
echo "test.vcs = org.netbeans.modules.git.GitVCS" >> ide/versioning/test/qa-functional/data/tck.properties
# Run functional tests for ide/versioning module
ant $OPTS -f ide/versioning test-qa-functional
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
mysql-db-test:
name: DB Tests with MySQL on Linux/JDK ${{ matrix.java }}
# equals env.test_enterprise == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'Java EE/Jakarta EE') || contains(github.event.pull_request.labels.*.name, 'Micronaut') || contains(github.event.pull_request.labels.*.name, 'enterprise') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
services:
mysql:
image: mysql:5.7
env:
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: Setup Env
run: |
echo "OPTS_TEST=-Dtest-unit-sys-prop.mysql.user=root -Dtest-unit-sys-prop.mysql.password=test -Dtest-unit-sys-prop.mysql.host=127.0.0.1" >> $GITHUB_ENV
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'test';\nFLUSH PRIVILEGES;\n" | mysql -h 127.0.0.1 --port 3306 -u root -ptest
- name: ide/db.metadata.model
run: .github/retry.sh ant $OPTS $OPTS_TEST -f ide/db.metadata.model test
- name: ide/db.mysql
run: .github/retry.sh ant $OPTS $OPTS_TEST -f ide/db.mysql test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
php:
name: PHP on ${{ matrix.os }}/JDK ${{ matrix.java }}
# equals env.test_php == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'PHP') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ${{ matrix.os }}
timeout-minutes: 120
env:
DISPLAY: ":99.0"
strategy:
matrix:
java: [ '17' ]
os: [ 'windows-latest', 'ubuntu-latest' ]
exclude:
- os: ${{ github.event_name == 'pull_request' && 'nothing' || 'windows-latest' }}
fail-fast: false
defaults:
run:
# hack: shorten paths to stay below 32k char process arg limit of windows (symptom: junit jvm spawn failures)
# note 'a' is apparently a mount point, we shouldn't go below that
# note actions don't care about the defaults here, its just for 'run:', they will keep using the long path which is fine
working-directory: ${{ contains(matrix.os, 'windows') && 'D:\\a\\ws' || github.workspace }}
shell: bash
steps:
- name: Symlink short paths for windows
if: contains(matrix.os, 'windows')
run: mklink /d D:\\a\\ws ${{ github.workspace }}
working-directory: ${{ github.workspace }}
shell: cmd
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
# linux specific setup
- name: Setup PHP
if: contains(matrix.os, 'ubuntu')
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
tools: pecl
extensions: xdebug
ini-values: xdebug.mode=debug
- name: Setup Xvfb
if: contains(matrix.os, 'ubuntu')
run: Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
# - - -
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: hudson.php
run: ant $OPTS -f php/hudson.php test
- name: languages.neon
run: ant $OPTS -f php/languages.neon test
- name: php.api.annotation
run: ant $OPTS -f php/php.api.annotation test
- name: php.api.documentation
run: ant $OPTS -f php/php.api.documentation test
- name: php.api.executable
run: ant $OPTS -f php/php.api.executable test
- name: php.api.framework
run: ant $OPTS -f php/php.api.framework test
- name: php.api.phpmodule
run: ant $OPTS -f php/php.api.phpmodule test
- name: php.api.testing
run: ant $OPTS -f php/php.api.testing test
- name: php.apigen
run: ant $OPTS -f php/php.apigen test
- name: php.atoum
run: ant $OPTS -f php/php.atoum test
- name: php.code.analysis
run: ant $OPTS -f php/php.code.analysis test
- name: php.codeception
run: ant $OPTS -f php/php.codeception test
- name: php.composer
run: ant $OPTS -f php/php.composer test
# needs X fails on Windows
- name: php.dbgp
if: contains(matrix.os, 'ubuntu')
run: ant $OPTS -f php/php.dbgp test
- name: php.doctrine2
run: ant $OPTS -f php/php.doctrine2 test
# longest step (~40min)
- name: php.editor
run: ant $OPTS -Dtest.config=stable -f php/php.editor test
- name: php.editor (unreliable tests)
run: .github/retry.sh ant $OPTS -Dtest.config=unreliable -f php/php.editor test
- name: php.latte
run: ant $OPTS -f php/php.latte test
- name: php.nette.tester
run: ant $OPTS -f php/php.nette.tester test
- name: php.phpunit
run: ant $OPTS -f php/php.phpunit test
- name: php.project
run: ant $OPTS -f php/php.project test
- name: php.refactoring
run: ant $OPTS -f php/php.refactoring test
- name: php.smarty
run: ant $OPTS -f php/php.smarty test
- name: php.symfony
run: ant $OPTS -f php/php.symfony test
- name: php.symfony2
run: ant $OPTS -f php/php.symfony2 test
- name: php.twig
run: ant $OPTS -f php/php.twig test
- name: php.zend
run: ant $OPTS -f php/php.zend test
- name: php.zend2
run: ant $OPTS -f php/php.zend2 test
- name: spellchecker.bindings.php
run: ant $OPTS -f php/spellchecker.bindings.php test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
lsp-test:
name: LSP tests on Linux/JDK ${{ matrix.java }}
# equals env.test_lsp == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'LSP') || contains(github.event.pull_request.labels.*.name, 'Gradle') || contains(github.event.pull_request.labels.*.name, 'Maven') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: ide/lsp.client
run: ant $OPTS -f ide/lsp.client test
- name: java/java.lsp.server
run: .github/retry.sh ant $OPTS -f java/java.lsp.server test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
graalvm-test:
name: GraalVM ${{ matrix.graal }} Tests
# equals env.test_graalvm == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'GraalVM') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
# TODO uses GraalVM 17 / 22.3.1 which is the last known release which offers all required language extensions
# GraalVM based on JDK 21+ doesn't support the 'gu' tool anymore - extensions are now regular application dependencies
graal: [ '22.3.1' ]
fail-fast: false
steps:
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: Setup GraalVM ${{ matrix.graal }}
run: |
URL=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${{ matrix.graal }}/graalvm-ce-java17-linux-amd64-${{ matrix.graal }}.tar.gz
curl -L $URL | tar -xz
GRAALVM=`pwd`/graalvm-ce-java17-${{ matrix.graal }}
echo "JAVA_HOME=$GRAALVM" >> $GITHUB_ENV
- name: Setup GraalVM Languages (python, R, ruby and js)
run: $JAVA_HOME/bin/gu install --no-progress python R ruby js
- name: platform/core.network
run: ant $OPTS -f platform/core.network test
- name: platform/api.scripting
run: ant $OPTS -f platform/api.scripting test
- name: ide/libs.graalsdk
run: ant $OPTS -f ide/libs.graalsdk test
- name: webcommon/libs.graaljs
run: ant $OPTS -f webcommon/libs.graaljs test
- name: profiler/profiler.oql
run: ant $OPTS -f profiler/profiler.oql test
- name: java/nashorn.execution
run: ant $OPTS -f java/nashorn.execution test
- name: java/debugger.jpda.truffle
run: .github/retry.sh ant $OPTS -f java/debugger.jpda.truffle test
- name: Create Test Summary
uses: test-summary/action@v2
if: failure()
with:
paths: "./*/*/build/test/*/results/TEST-*.xml"
vscode-extension-test:
name: VSCode Extension Tests on JDK ${{ matrix.java }}
# equals env.test_vscode_extension == 'true'
if: ${{ contains(github.event.pull_request.labels.*.name, 'VSCode Extension') || contains(github.event.pull_request.labels.*.name, 'ci:all-tests') || github.event_name != 'pull_request' }}
needs: base-build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
matrix:
java: [ '17' ]
fail-fast: false
steps:
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: ${{ env.DEFAULT_JAVA_DISTRIBUTION }}
- name: Set up node
uses: actions/setup-node@v4
with:
node-version: 18
- name: Setup Xvfb
run: |
echo "DISPLAY=:99.0" >> $GITHUB_ENV
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
- name: Download Build
uses: actions/download-artifact@v4
with:
name: build
- name: Extract
run: tar --zstd -xf build.tar.zst
- name: build-vscode-ext
run: |
cd java/java.lsp.server
ant $OPTS build-vscode-ext -D3rdparty.modules=.*externalcodeformatter.*
- name: test-vscode-ext
run: |
cd java/java.lsp.server
env "netbeans.extra.options=-J-Dnetbeans.logger.console=true" ant $OPTS test-vscode-ext
# cleanup job depends on everything so that it is forced to run last even if a long job fails early.
# 'paperwork' is left out intentionally, since it doesn't run unit tests (hopefully doesn't need restarts)
# and shouldn't prevent cleanup on validation failure - which might be common during dev time
cleanup:
name: Cleanup Workflow Artifacts
needs:
- base-build
- commit-validation
- build-system-test
- build-from-src-zip
- ide-modules-test
- platform-modules-test1
- platform-modules-test2
- java-modules-test
- java-hints-test
- java-debugger-test
- profiler-test
- build-tools
- webcommon-test
- php
- javafx-test
- groovy-test
- rust-test
- enterprise-test
- versioning-test
- lsp-test
- mysql-db-test
- graalvm-test
- vscode-extension-test
# cleanup if the primary build job succeeded and
# * nothing else failed (allows manual restarts)
# * the workflow got cancelled
if: ${{ always() && needs.base-build.result == 'success' && (!contains(needs.*.result, 'failure') || cancelled()) }}
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Delete Workspace Artifact
uses: geekyeggo/delete-artifact@v5
with:
name: build
useGlob: false
- name: Delete Dev Build Artifact
uses: geekyeggo/delete-artifact@v5
if: ${{ contains(github.event.pull_request.labels.*.name, 'ci:dev-build') && cancelled() }}
with:
name: dev-build_${{github.event.pull_request.number || github.run_id}}
useGlob: false