You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by mb...@apache.org on 2022/03/30 10:57:21 UTC

[netbeans] branch master updated: github actions ci pipeline.

This is an automated email from the ASF dual-hosted git repository.

mbien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 3f6562f  github actions ci pipeline.
     new 3625461  Merge pull request #3785 from mbien/ci-pipeline
3f6562f is described below

commit 3f6562f5b0497cb1d28e34b75e7156e979b59761
Author: Michael Bien <mb...@gmail.com>
AuthorDate: Tue Mar 15 20:18:43 2022 +0100

    github actions ci pipeline.
    
    - converted to matrix jobs + other improvements
    - full cluster build on JDK 11 and 17
    - moved commit-validation tests from travis to the gh actions matrix
    - commit validaiton jobs on 8, 11, 17 and 19ea
    - remove caching on secondary jobs since everything is in the artifact
    - set bash as default shell on windows (everything uses bash now)
    - bump JDK versions to 11, PHP remains on 8 since if fails otherwise
    - bump OS versions to latest
    - add cleanup job which removes temporary build artifacts to conserve
      resources (gh action is deployed via a git submodule)
---
 .github/actions/delete-artifact          |   1 +
 .github/workflows/cv.yml                 |  48 ----
 .github/workflows/ensure-jdk8.yml        |  60 -----
 .github/workflows/javadoc.yml            |  51 -----
 .github/workflows/linux-upstream-jdk.yml |  56 -----
 .github/workflows/linux.yml              |  48 ----
 .github/workflows/macos.yml              |  56 -----
 .github/workflows/main.yml               | 371 +++++++++++++++++++++++++++++++
 .github/workflows/php.yml                | 142 ------------
 .github/workflows/windows.yml            | 134 -----------
 .gitmodules                              |   3 +
 .travis.yml                              |  39 ----
 README.md                                |   9 +-
 13 files changed, 376 insertions(+), 642 deletions(-)

diff --git a/.github/actions/delete-artifact b/.github/actions/delete-artifact
new file mode 160000
index 0000000..56e063d
--- /dev/null
+++ b/.github/actions/delete-artifact
@@ -0,0 +1 @@
+Subproject commit 56e063d7d8bf9972ac54aca4454d3a6675917f44
diff --git a/.github/workflows/cv.yml b/.github/workflows/cv.yml
deleted file mode 100644
index ae5e20c..0000000
--- a/.github/workflows/cv.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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: Commit-validation
-
-on:
-  push:
-  pull_request:
-
-jobs:
-  commit-validation:
-    name: Commit-validation (on Linux)
-    runs-on: ubuntu-18.04
-    env:
-      OPTS: -Dcluster.config=release -Dtest-unit-sys-prop.ignore.random.failures=true
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      - name: Caching dependencies
-        uses: actions/cache@v2
-        with:
-          path: ~/.hgexternalcache
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - name: Clean
-        run: ant -Dcluster.config=release clean
-
-      - name: Build
-        run: ant -Dcluster.config=release build
-
-      - name: Validate consistency and basic tests
-        run: ant -Dcluster.config=release commit-validation
diff --git a/.github/workflows/ensure-jdk8.yml b/.github/workflows/ensure-jdk8.yml
deleted file mode 100644
index c077eda..0000000
--- a/.github/workflows/ensure-jdk8.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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: Ensure JDK-8
-
-on:
-  push:
-  pull_request:
-
-jobs:
-  jdk11-jdk8:
-    name: "Compile with JDK-11 and test something on JDK-8"
-    runs-on: ubuntu-18.04
-    env:
-      OPTS: -Dcluster.config=basic -Dtest-unit-sys-prop.ignore.random.failures=true
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Caching dependencies
-        uses: actions/cache@v2
-        with:
-          path: ~/.hgexternalcache
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - name: Set up JDK 8
-        uses: actions/setup-java@v2
-        with:
-            distribution: 'zulu'
-            java-version: 8
-
-      - name: Record JDK8
-        run: echo "$JAVA_HOME" | tee `pwd`/jdk8
-
-      - name: Set up JDK 11
-        uses: actions/setup-java@v2
-        with:
-            distribution: 'zulu'
-            java-version: 11
-
-
-      - name: Build
-        run: ant $OPTS build
-
-      - name: Test java.source.base on JDK-8
-        run: JAVA_HOME=`cat jdk8` ant $OPTS -f java/java.source.base test
diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml
deleted file mode 100644
index 105ecb2..0000000
--- a/.github/workflows/javadoc.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-# 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: Javadoc
-
-on:
-  push:
-  pull_request:
-
-jobs:
-  linux-javadoc:
-    name: Check Javadoc
-    runs-on: ubuntu-18.04
-    env:
-      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      - name: Caching dependencies
-        uses: actions/cache@v2
-        with:
-          path: ~/.hgexternalcache
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - name: Get maven coordinates
-        run: ant getallmavencoordinates
-
-      - name: Build nbms
-        run: ant build-nbms
-
-      - name: Build source zips
-        run: ant build-source-zips
-
-      - name: Build javadoc
-        run: ant build-javadoc
diff --git a/.github/workflows/linux-upstream-jdk.yml b/.github/workflows/linux-upstream-jdk.yml
deleted file mode 100644
index 12241ed..0000000
--- a/.github/workflows/linux-upstream-jdk.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-# 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: Upstream JDK
-
-on:
-  push:
-  pull_request:
-
-# job is intended for early detection of build failures on new JDKs
-jobs:
-  linux:
-    name: Check Build on Linux/JDK17
-    runs-on: ubuntu-latest
-    env:
-      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
-
-    steps:
-
-      - name: Set up JDK 17
-        uses: actions/setup-java@v2
-        with:
-            distribution: 'zulu'
-            java-version: 17
-
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      - name: Caching dependencies
-        uses: actions/cache@v2
-        with:
-          path: ~/.hgexternalcache
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - name: Clean
-        run: ant -Dcluster.config=full clean
-
-      - name: Build (cluster.config=full)
-        run: ant -Dcluster.config=full build
-
-# todo: figure out if anything is testable post JDK 15
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
deleted file mode 100644
index a686a79..0000000
--- a/.github/workflows/linux.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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: Linux
-
-on:
-  push:
-  pull_request:
-
-jobs:
-  linux:
-    name: Check Linux
-    runs-on: ubuntu-18.04
-    env:
-      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      - name: Caching dependencies
-        uses: actions/cache@v2
-        with:
-          path: ~/.hgexternalcache
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - name: Clean
-        run: ant -Dcluster.config=basic clean
-
-      - name: Build
-        run: ant -Dcluster.config=basic build
-
-      - name: Test Netbeans Build System
-        run: ant -Dcluster.config=basic localtest
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
deleted file mode 100644
index 06c824e..0000000
--- a/.github/workflows/macos.yml
+++ /dev/null
@@ -1,56 +0,0 @@
-# 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: macOS
-
-on:
-  push:
-  pull_request:
-
-jobs:
-  macos:
-    name: Commit-validation (on macOS)
-    runs-on: macos-10.15
-    env:
-      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
-    steps:
-      - uses: actions/checkout@v2
-
-      - uses: actions/cache@v2
-        with:
-          path: |
-            ~/.hgexternalcache
-            ~/Library/Caches/Homebrew
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - run: brew install ant
-
-      - name: Clean
-        run: ant clean
-
-      - name: Build
-        run: ant build
-
-      - name: Test platform/masterfs.macosx
-        run: ant -f platform/masterfs.macosx test
-
-      - name: Test platform/core.network
-        run: ant -f platform/core.network test
-
-      - name: Validate consistency and basic tests
-        run: ant -Dcluster.config=release commit-validation
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..09fa14e
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,371 @@
+# 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:
+  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 }} 
+    runs-on: ubuntu-latest
+    env:
+      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
+    strategy:
+      matrix:
+        java: [ '11', '17' ]
+      fail-fast: false
+    steps:
+        
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: 'zulu'
+
+      - name: Caching dependencies
+        uses: actions/cache@v2
+        with:
+          path: ~/.hgexternalcache
+          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
+          restore-keys: ${{ runner.os }}-
+          
+      - name: Checkout ${{ github.ref }} ( ${{ github.sha }} )
+        uses: actions/checkout@v3
+
+      - name: Build NetBeans
+        run: ant -Dcluster.config=release build-nozip
+
+      - name: Archive Build
+        if: ${{ matrix.java == '11' }}
+        run: tar -czf /tmp/build.tar.gz --exclude ".git" .
+
+      - name: Upload Build
+        if: ${{ matrix.java == '11' }}
+        uses: actions/upload-artifact@v3
+        with:
+          name: build
+          path: /tmp/build.tar.gz
+          retention-days: 1
+          if-no-files-found: error
+
+
+# secondary jobs
+  linux-commit-validation:
+    needs: base-build
+    name: Commit Validation on Linux/JDK ${{ matrix.java }} 
+    runs-on: ubuntu-latest
+    env:
+      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
+    strategy:
+      matrix:
+        java: [ '8', '11', '17', '19-ea' ]
+      fail-fast: false
+    steps:
+
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: 'zulu'
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar -xzf build.tar.gz --exclude nbbuild/build/test
+        
+      - name: SM config
+        if: ${{ matrix.java == '19-ea' }}
+        run: echo "SECURITY_MANAGER_OPTIONS=-Djava.security.manager=allow" >> $GITHUB_ENV
+
+      - name: JMS config
+        if: ${{ matrix.java != '8' }}
+        run: echo "JAVA_TOOL_OPTIONS=$SECURITY_MANAGER_OPTIONS --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED" >> $GITHUB_ENV
+        
+      - name: Commit Validation tests
+        run: ant -Dcluster.config=release commit-validation
+
+  linux-build-system-test:
+    needs: base-build
+    name: Build-System Test on Linux/JDK ${{ matrix.java }} 
+    runs-on: ubuntu-latest
+    env:
+      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
+    strategy:
+      matrix:
+        java: [ '11' ]
+    steps:
+
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: 'zulu'
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar -xzf build.tar.gz --exclude nbbuild/build/test
+
+      - name: Test Netbeans Build System
+        run: ant -Dcluster.config=release localtest
+
+  linux-javadoc:
+    needs: base-build
+    name: Build NBMs, Source zips and Javadoc on JDK ${{ matrix.java }} 
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        java: [ '11' ]
+    env:
+      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
+    steps:
+
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: 'zulu'
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar -xzf build.tar.gz --exclude nbbuild/build/test
+
+      - name: Get maven coordinates
+        run: ant getallmavencoordinates
+
+      - name: Build nbms
+        run: ant build-nbms
+
+      - name: Build source zips
+        run: ant build-source-zips
+
+      - name: Build javadoc
+        run: ant build-javadoc
+
+  macos:
+    needs: base-build
+    name: Tests on MacOS/JDK ${{ matrix.java }} 
+    runs-on: macos-11
+    env:
+      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
+    strategy:
+      matrix:
+        java: [ '11' ]
+    steps:
+
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: 'zulu'
+
+      - uses: actions/cache@v2
+        with:
+          path: ~/Library/Caches/Homebrew
+          key: ${{ runner.os }}-homebrew
+          restore-keys: ${{ runner.os }}-homebrew
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar -xzf build.tar.gz --exclude nbbuild/build/test
+
+      - run: brew install ant
+
+      - name: Test platform/masterfs.macosx
+        run: ant -f platform/masterfs.macosx test
+
+      - name: Test platform/core.network
+        run: ant -f platform/core.network test
+
+      - name: Validate consistency and basic tests
+        run: ant -Dcluster.config=release commit-validation
+
+  php:
+    needs: base-build
+    name: PHP on ${{ matrix.os }}/JDK ${{ matrix.java }} 
+    runs-on: ${{ matrix.os }}
+    defaults:
+      run:
+        shell: bash
+    env:
+      DISPLAY: ":99.0"
+      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
+      OPTS: -Dtest-unit-sys-prop.ignore.random.failures=true
+    strategy:
+      matrix:
+        java: [ '8' ]
+        os: [ 'windows-2022', 'ubuntu-20.04' ]
+      fail-fast: false
+    steps:
+
+      - name: Set up JDK ${{ matrix.java }} 
+        uses: actions/setup-java@v2
+        with:
+          java-version: ${{ matrix.java }} 
+          distribution: 'zulu'
+
+      # linux specific setup
+      - name: Setup PHP
+        if: contains(matrix.os, 'ubuntu')
+        uses: shivammathur/setup-php@2.8.0
+        with:
+          php-version: '7.4'
+          tools: pecl
+          extensions: xdebug
+          ini-values: xdebug.mode=debug
+
+      - name: Launch Xvfb
+        if: contains(matrix.os, 'ubuntu')
+        run: Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
+      # - - -
+
+      - name: Download Build
+        uses: actions/download-artifact@v3
+        with:
+          name: build
+
+      - name: Extract
+        run: tar -xzf build.tar.gz --exclude nbbuild/build/test
+
+      - name: Test Platform Core Network
+        run: ant $OPTS -f platform/core.network test
+
+      - name: Test PHP Hudson
+        run: ant $OPTS -f php/hudson.php test
+
+      - name: Test PHP Neon
+        run: ant $OPTS -f php/languages.neon test
+
+      - name: Test PHP API Annotation
+        run: ant $OPTS -f php/php.api.annotation test
+
+      - name: Test PHP API Documentation
+        run: ant $OPTS -f php/php.api.documentation test
+
+      - name: Test PHP API Executable
+        run: ant $OPTS -f php/php.api.executable test
+
+      - name: Test PHP API Framework
+        run: ant $OPTS -f php/php.api.framework test
+
+      - name: Test PHP API Module
+        run: ant $OPTS -f php/php.api.phpmodule test
+
+      - name: Test PHP API Testing
+        run: ant $OPTS -f php/php.api.testing test
+
+      - name: Test PHP ApiGen
+        run: ant $OPTS -f php/php.apigen test
+
+      - name: Test PHP Atoum
+        run: ant $OPTS -f php/php.atoum test
+
+      - name: Test PHP Code Analysis
+        run: ant $OPTS -f php/php.code.analysis test
+
+      - name: Test PHP Codeception
+        run: ant $OPTS -f php/php.codeception test
+
+      - name: Test PHP Composer
+        run: ant $OPTS -f php/php.composer test
+
+      # needs X fails on fails on Windows
+      - name: Test PHP Debugger
+        if: contains(matrix.os, 'ubuntu')
+        run: ant $OPTS -f php/php.dbgp test
+
+      - name: Test PHP Doctrine2
+        run: ant $OPTS -f php/php.doctrine2 test
+
+      - name: Test PHP Editor
+        run: ant $OPTS -f php/php.editor test
+
+      - name: Test PHP Latte
+        run: ant $OPTS -f php/php.latte test
+
+      - name: Test PHP Nette Tester
+        run: ant $OPTS -f php/php.nette.tester test
+
+      - name: Test PHPUnit
+        run: ant $OPTS -f php/php.phpunit test
+
+      - name: Test PHP Project
+        run: ant $OPTS -f php/php.project test
+
+      - name: Test PHP Refactoring
+        run: ant $OPTS -f php/php.refactoring test
+
+      - name: Test PHP Smarty
+        run: ant $OPTS -f php/php.smarty test
+
+      - name: Test PHP Symfony
+        run: ant $OPTS -f php/php.symfony test
+
+      - name: Test PHP Symfony 2
+        run: ant $OPTS -f php/php.symfony2 test
+
+      - name: Test PHP Twig
+        run: ant $OPTS -f php/php.twig test
+
+      - name: Test PHP Zend
+        run: ant $OPTS -f php/php.zend test
+
+      - name: Test PHP Zend 2
+        run: ant $OPTS -f php/php.zend2 test
+
+      - name: Test PHP Spellchecker Bindings
+        run: ant $OPTS -f php/spellchecker.bindings.php test
+ 
+
+# last job depends on everything so that it is forced to run last even if a long job fails early
+  cleanup:
+    name: Cleanup Workflow Artifacts
+    needs: [base-build, linux-commit-validation, linux-build-system-test, linux-javadoc, macos, php]
+    if: ${{ always() }}
+    runs-on: ubuntu-latest
+    steps:
+
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          persist-credentials: false
+          submodules: recursive
+
+      - uses: ./.github/actions/delete-artifact/
+        name: Delete build Artifact
+        with:
+          name: build
diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml
deleted file mode 100644
index c9325c3..0000000
--- a/.github/workflows/php.yml
+++ /dev/null
@@ -1,142 +0,0 @@
-# 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: PHP
-
-on:
-  push:
-  pull_request:
-
-jobs:
-  linux-php:
-    name: PHP on Linux
-    runs-on: ubuntu-18.04
-    env:
-      DISPLAY: ":99.0"
-      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
-      OPTS: -Dcluster.config=php -Dtest-unit-sys-prop.ignore.random.failures=true
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      - name: Caching dependencies
-        uses: actions/cache@v2
-        with:
-          path: ~/.hgexternalcache
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - name: Setup PHP
-        uses: shivammathur/setup-php@2.8.0
-        with:
-          php-version: '7.4'
-          tools: pecl
-          extensions: xdebug
-          ini-values: xdebug.mode=debug
-
-      - name: Launch Xvfb
-        run: Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
-
-      - name: Clean
-        run: ant $OPTS clean
-
-      - name: Build
-        run: ant $OPTS build
-
-      - name: Test Hudson
-        run: ant $OPTS -f php/hudson.php test
-
-      - name: Test Neon
-        run: ant $OPTS -f php/languages.neon test
-
-      - name: Test API Annotation
-        run: ant $OPTS -f php/php.api.annotation test
-
-      - name: Test API Documentation
-        run: ant $OPTS -f php/php.api.documentation test
-
-      - name: Test API Executable
-        run: ant $OPTS -f php/php.api.executable test
-
-      - name: Test API Framework
-        run: ant $OPTS -f php/php.api.framework test
-
-      - name: Test API PHP Module
-        run: ant $OPTS -f php/php.api.phpmodule test
-
-      - name: Test API Testing
-        run: ant $OPTS -f php/php.api.testing test
-
-      - name: Test ApiGen
-        run: ant $OPTS -f php/php.apigen test
-
-      - name: Test Atoum
-        run: ant $OPTS -f php/php.atoum test
-
-      - name: Test Code Analysis
-        run: ant $OPTS -f php/php.code.analysis test
-
-      - name: Test Codeception
-        run: ant $OPTS -f php/php.codeception test
-
-      - name: Test Composer
-        run: ant $OPTS -f php/php.composer test
-
-      - name: Test PHP Debugger
-        run: ant $OPTS -f php/php.dbgp test
-
-      - name: Test Doctrine2
-        run: ant $OPTS -f php/php.doctrine2 test
-
-      - name: Test PHP Editor
-        run: ant $OPTS -f php/php.editor test
-
-      - name: Test Latte
-        run: ant $OPTS -f php/php.latte test
-
-      - name: Test Nette Tester
-        run: ant $OPTS -f php/php.nette.tester test
-
-      - name: Test PHPUnit
-        run: ant $OPTS -f php/php.phpunit test
-
-      - name: Test PHP Project
-        run: ant $OPTS -f php/php.project test
-
-      - name: Test Refactoring
-        run: ant $OPTS -f php/php.refactoring test
-
-      - name: Test Smarty
-        run: ant $OPTS -f php/php.smarty test
-
-      - name: Test Symfony
-        run: ant $OPTS -f php/php.symfony test
-
-      - name: Test Symfony 2
-        run: ant $OPTS -f php/php.symfony2 test
-
-      - name: Test Twig
-        run: ant $OPTS -f php/php.twig test
-
-      - name: Test Zend
-        run: ant $OPTS -f php/php.zend test
-
-      - name: Test Zend 2
-        run: ant $OPTS -f php/php.zend2 test
-
-      - name: Test Spellchecker Bindings
-        run: ant $OPTS -f php/spellchecker.bindings.php test
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
deleted file mode 100644
index 1725ded..0000000
--- a/.github/workflows/windows.yml
+++ /dev/null
@@ -1,134 +0,0 @@
-# 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: Windows
-
-on:
-  push:
-  pull_request:
-
-jobs:
-  windows:
-    name: Check Windows
-    runs-on: windows-2019
-    env:
-      ANT_OPTS: -Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json
-      OPTS: -Dtest-unit-sys-prop.ignore.random.failures=true
-    steps:
-      - name: Checkout
-        uses: actions/checkout@v2
-
-      - name: Caching dependencies
-        uses: actions/cache@v2
-        with:
-          path: ~/.hgexternalcache
-          key: ${{ runner.os }}-${{ hashFiles('*/external/binaries-list', '*/*/external/binaries-list') }}
-          restore-keys: ${{ runner.os }}-
-
-      - name: Clean
-        run: ant clean
-
-      - name: Build
-        run: ant build
-
-      - name: Test Platform Core Network
-        run: ant $env:OPTS -f platform/core.network test
-
-      - name: Test PHP Hudson
-        run: ant $env:OPTS -f php/hudson.php test
-
-      - name: Test PHP Neon
-        run: ant $env:OPTS -f php/languages.neon test
-
-      - name: Test PHP API Annotation
-        run: ant $env:OPTS -f php/php.api.annotation test
-
-      - name: Test PHP API Documentation
-        run: ant $env:OPTS -f php/php.api.documentation test
-
-      - name: Test PHP API Executable
-        run: ant $env:OPTS -f php/php.api.executable test
-
-      - name: Test PHP API Framework
-        run: ant $env:OPTS -f php/php.api.framework test
-
-      - name: Test PHP API PHP Module
-        run: ant $env:OPTS -f php/php.api.phpmodule test
-
-      - name: Test PHP API Testing
-        run: ant $env:OPTS -f php/php.api.testing test
-
-      - name: Test PHP ApiGen
-        run: ant $env:OPTS -f php/php.apigen test
-
-      - name: Test PHP Atoum
-        run: ant $env:OPTS -f php/php.atoum test
-
-      - name: Test PHP Code Analysis
-        run: ant $env:OPTS -f php/php.code.analysis test
-
-      - name: Test PHP Codeception
-        run: ant $env:OPTS -f php/php.codeception test
-
-      - name: Test PHP Composer
-        run: ant $env:OPTS -f php/php.composer test
-
-      # needs X fails on fails on Windows
-      # - name: Test PHP Debugger
-      #   run: ant $env:OPTS -f php/php.dbgp test
-
-      - name: Test PHP Doctrine2
-        run: ant $env:OPTS -f php/php.doctrine2 test
-
-      - name: Test PHP Editor
-        run: ant $env:OPTS -f php/php.editor test
-
-      - name: Test PHP Latte
-        run: ant $env:OPTS -f php/php.latte test
-
-      - name: Test PHP Nette Tester
-        run: ant $env:OPTS -f php/php.nette.tester test
-
-      - name: Test PHPUnit
-        run: ant $env:OPTS -f php/php.phpunit test
-
-      - name: Test PHP Project
-        run: ant $env:OPTS -f php/php.project test
-
-      - name: Test PHP Refactoring
-        run: ant $env:OPTS -f php/php.refactoring test
-
-      - name: Test PHP Smarty
-        run: ant $env:OPTS -f php/php.smarty test
-
-      - name: Test PHP Symfony
-        run: ant $env:OPTS -f php/php.symfony test
-
-      - name: Test PHP Symfony 2
-        run: ant $env:OPTS -f php/php.symfony2 test
-
-      - name: Test PHP Twig
-        run: ant $env:OPTS -f php/php.twig test
-
-      - name: Test PHP Zend
-        run: ant $env:OPTS -f php/php.zend test
-
-      - name: Test PHP Zend 2
-        run: ant $env:OPTS -f php/php.zend2 test
-
-      - name: Test PHP Spellchecker Bindings
-        run: ant $env:OPTS -f php/spellchecker.bindings.php test
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..44927a9
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule ".github/actions/delete-artifact"]
+	path = .github/actions/delete-artifact
+	url = https://github.com/GeekyEggo/delete-artifact
diff --git a/.travis.yml b/.travis.yml
index 2c0af82..3b31f6a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -682,45 +682,6 @@ matrix:
           script:
             - nbbuild/travis/scripting.sh
 
-        - name: commit-validation
-          jdk: openjdk8
-          env:
-            - OPTS="-quiet -Dcluster.config=release -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - hide-logs.sh ant $OPTS commit-validation
-
-        - name: commit-validation on Java 11
-          jdk: openjdk11
-          env:
-            - OPTS="-quiet -Dcluster.config=release -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - wget https://raw.githubusercontent.com/sormuras/bach/master/install-jdk.sh
-            - export TEST_JDK=`bash install-jdk.sh --feature 11 --license GPL --emit-java-home --silent | tail -1`
-            - export JAVA_HOME=$TEST_JDK
-            - export OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json $OPTS -Dnbjdk.home=$TEST_JDK"
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-            - ant $OPTS test -Dtest.includes=NoTestsJustBuild
-          script:
-            - hide-logs.sh ant $OPTS commit-validation
-
-        - name: commit-validation on Java 15
-          jdk: openjdk8
-          env:
-            - OPTS="-quiet -Dcluster.config=release -Djavac.compilerargs=-nowarn -Dbuild.compiler.deprecation=false -Dtest-unit-sys-prop.ignore.random.failures=true"
-          before_script:
-            - wget https://raw.githubusercontent.com/sormuras/bach/master/install-jdk.sh
-            - export TEST_JDK=`bash install-jdk.sh --feature 15 --license GPL --emit-java-home --silent | tail -1`
-            - export OPTS="-Dmetabuild.jsonurl=https://raw.githubusercontent.com/apache/netbeans-jenkins-lib/master/meta/netbeansrelease.json $OPTS -Dtest.nbjdk.home=$TEST_JDK"
-            - nbbuild/travis/ant.sh $OPTS clean
-            - nbbuild/travis/ant.sh $OPTS build
-          script:
-            - export JAVA_HOME=$TEST_JDK
-            - hide-logs.sh ant $OPTS commit-validation
-
 #   exile: for tests which don't behave. Job should be kept short to be easily restartable
         - name: Test unreliable tests on Java 8
           jdk: openjdk8
diff --git a/README.md b/README.md
index 7b108fc..955db1d 100644
--- a/README.md
+++ b/README.md
@@ -27,14 +27,7 @@ Apache NetBeans is an open source development environment, tooling platform, and
 
 ### Build status
    * GitHub actions
-     * [![Linux](https://github.com/apache/netbeans/actions/workflows/linux.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/linux.yml)
-     * [![Windows](https://github.com/apache/netbeans/actions/workflows/windows.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/windows.yml)
-     * [![macOS](https://github.com/apache/netbeans/actions/workflows/macos.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/macos.yml)
-     * [![Commit Validation](https://github.com/apache/netbeans/actions/workflows/cv.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/cv.yml)
-     * [![Upstream JDK](https://github.com/apache/netbeans/actions/workflows/linux-upstream-jdk.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/linux-upstream-jdk.yml)
-     * [![Ensure JDK-8](https://github.com/apache/netbeans/actions/workflows/ensure-jdk8.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/ensure-jdk8.yml)
-     * [![PHP](https://github.com/apache/netbeans/actions/workflows/php.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/php.yml)
-     * [![Javadoc](https://github.com/apache/netbeans/actions/workflows/javadoc.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/javadoc.yml)
+     * [![Build Status](https://github.com/apache/netbeans/actions/workflows/main.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/main.yml)
      * [![Profiler Lib Native Binaries](https://github.com/apache/netbeans/actions/workflows/native-binary-build-lib.profiler.yml/badge.svg)](https://github.com/apache/netbeans/actions/workflows/native-binary-build-lib.profiler.yml)
    * TravisCI:
      * [![Build Status](https://app.travis-ci.com/apache/netbeans.svg?branch=master)](https://app.travis-ci.com/apache/netbeans)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists