From cc29aad9c42005160fb9e6b55a937892e0eab62a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?JB=20Onofr=C3=A9?= <jbonofre@apache.org>
Date: Mon, 29 Sep 2025 14:29:22 +0200
Subject: [PATCH] Sync branch

---
 .asf.yaml                   |  47 +++++++++
 .github/dependabot.yml      |  36 +++++++
 .github/workflows/build.yml |  45 ++++++++
 Jenkinsfile                 | 200 ------------------------------------
 4 files changed, 128 insertions(+), 200 deletions(-)
 create mode 100644 .github/dependabot.yml
 create mode 100644 .github/workflows/build.yml
 delete mode 100644 Jenkinsfile

diff --git a/.asf.yaml b/.asf.yaml
index 9420e0abc70..6ac3155568e 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -15,5 +15,52 @@
 # limitations under the License.
 #
 
+github:
+  description: "Apache Karaf, the enterprise modulith runtime"
+  homepage: https://karaf.apache.org
+  labels:
+    - apache
+    - karaf
+    - osgi
+    - modulith
+
+  enabled_merge_buttons:
+    merge: false
+    rebase: false
+    squash: true
+
+  del_branch_on_merge: true
+  
+  protected_branches:
+    main:
+      required_pull_request_reviews:
+        require_code_owner_reviews: false
+        required_approving_review_count: 0
+      required_linear_history: true
+      required_status_checks:
+        strict: false
+        contexts:
+          - build
+    karaf-4.4.x:
+      required_pull_request_reviews:
+        require_code_owner_reviews: false
+        required_approving_review_count: 0
+      required_linear_history: true
+      required_status_checks:
+        strict: false
+        contexts:
+          - build
+
+  features:
+    wiki: false
+    issues: true
+    projects: true
+
+  autolink_jira:
+    - KARAF
+
 notifications:
+  commits: commits@karaf.apache.org
+  issues: issues@karaf.apache.org
   pullrequests: commits@karaf.apache.org
+  jira_options: link label
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000000..686695e99a8
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,36 @@
+#
+# 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.
+#
+
+version: 2
+updates:
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "daily"
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-major"]
+  - package-ecosystem: "maven"
+    directory: "/"
+    schedule:
+      interval: "daily"
+    open-pull-requests-limit: 50
+    ignore:
+      - dependency-name: "*"
+        update-types: ["version-update:semver-major"]
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000000..e8b5f283d41
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,45 @@
+#
+# 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: Build
+
+on:
+  push:
+    branches: [ "karaf-4.4.x" ]
+  pull_request:
+    branches: [ "karaf-4.4.x" ]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Set up JDK 11
+        uses: actions/setup-java@v4
+        with:
+          java-version: '11'
+          distribution: 'temurin'
+      - name: Build
+        run: mvn -U -B -e clean install -DskipTests -Prat
+      - name: Test
+        run: mvn -B -e -fae test -Ptest
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index 76deecb42d8..00000000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,200 +0,0 @@
-#!groovy
-
-/*
- *
- *  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.
- *
- */
-
-pipeline {
-
-    agent {
-        node {
-            label 'ubuntu'
-        }
-    }
-
-    environment {
-        // ... setup any environment variables ...
-        MVN_LOCAL_REPO_OPT = '-Dmaven.repo.local=.repository'
-        MVN_TEST_FAIL_IGNORE = '-Dmaven.test.failure.ignore=true'
-    }
-
-    tools {
-        // ... tell Jenkins what java version, maven version or other tools are required ...
-        maven 'maven_3_latest'
-        jdk 'jdk_11_latest'
-    }
-
-    options {
-        // Configure an overall timeout for the build of one hour.
-        timeout(time: 5, unit: 'HOURS')
-        // When we have test-fails e.g. we don't need to run the remaining steps
-        skipStagesAfterUnstable()
-        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5'))
-    }
-
-    stages {
-        stage('Initialization') {
-            steps {
-                echo 'Building branch ' + env.BRANCH_NAME
-                echo 'Using PATH ' + env.PATH
-            }
-        }
-
-        stage('Cleanup') {
-            steps {
-                echo 'Cleaning up the workspace'
-                deleteDir()
-            }
-        }
-
-        stage('Checkout') {
-            steps {
-                echo 'Checking out branch ' + env.BRANCH_NAME
-                checkout scm
-            }
-        }
-
-        stage('Build JDK 20') {
-            tools {
-                jdk "jdk_20_latest"
-            }
-            steps {
-                echo 'Building JDK 20'
-                sh 'java -version'
-                sh 'mvn -version'
-                sh 'mvn -U -B -e clean install -DskipTests'
-            }
-        }
-
-        stage('Build JDK 17') {
-            tools {
-                jdk "jdk_17_latest"
-            }
-            steps {
-                echo 'Building JDK 17'
-                sh 'java -version'
-                sh 'mvn -version'
-                sh 'mvn -U -B -e clean install -DskipTests'
-            }
-        }
-
-        stage('Build JDK 11') {
-            tools {
-                jdk "jdk_11_latest"
-            }
-            steps {
-                echo 'Building JDK 11'
-                sh 'java -version'
-                sh 'mvn -version'
-                sh 'mvn -U -B -e clean install -DskipTests -Dinvoker.skip=true -Prat'
-            }
-        }
-
-        stage('Tests') {
-            steps {
-                echo 'Running tests'
-                sh 'mvn -B -e -fae test -Ptest'
-            }
-            post {
-                always {
-                    junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
-                    junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
-                }
-            }
-        }
-
-        // stage('Code Quality') {
-        //    steps {
-        //        echo 'Checking Code Quality on SonarCloud'
-        //        withCredentials([string(credentialsId: 'sonarcloud-key-apache-karaf', variable: 'SONAR_TOKEN')]) {
-        //            sh 'mvn sonar:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=apache -Dsonar.projectKey=apache_karaf -Dsonar.branch.name=${BRANCH_NAME} -Dsonar.login=${SONAR_TOKEN}'
-        //        }
-        //    }
-        //}
-
-        stage('Deploy') {
-            when {
-                expression {
-                    env.BRANCH_NAME ==~ /(karaf-4.3.x|main)/
-                }
-            }
-            steps {
-                echo 'Deploying'
-                sh 'mvn -B -e deploy -Pdeploy -DskipTests'
-            }
-        }
-    }
-
-    // Do any post build stuff ... such as sending emails depending on the overall build result.
-    post {
-        // If this build failed, send an email to the list.
-        failure {
-            script {
-                if(env.BRANCH_NAME == "karaf-4.3.x" || env.BRANCH_NAME == "main") {
-                    emailext(
-                            subject: "[BUILD-FAILURE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
-                            body: """
-BUILD-FAILURE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
-Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
-""",
-                            to: "commits@karaf.apache.org",
-                            recipientProviders: [[$class: 'DevelopersRecipientProvider']]
-                    )
-                }
-            }
-        }
-
-        // If this build didn't fail, but there were failing tests, send an email to the list.
-        unstable {
-            script {
-                if(env.BRANCH_NAME == "karaf-4.3.x" || env.BRANCH_NAME == "main") {
-                    emailext(
-                            subject: "[BUILD-UNSTABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
-                            body: """
-BUILD-UNSTABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
-Check console output at "<a href="${env.BUILD_URL}">${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]</a>"
-""",
-                            to: "commits@karaf.apache.org",
-                            recipientProviders: [[$class: 'DevelopersRecipientProvider']]
-                    )
-                }
-            }
-        }
-
-        // Send an email, if the last build was not successful and this one is.
-        success {
-            // Cleanup the build directory if the build was successful
-            // (in this cae we probably don't have to do any post-build analysis)
-            deleteDir()
-            script {
-                if ((env.BRANCH_NAME == "karaf-4.3.x" || env.BRANCH_NAME == "main") && (currentBuild.previousBuild != null) && (currentBuild.previousBuild.result != 'SUCCESS')) {
-                    emailext (
-                            subject: "[BUILD-STABLE]: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]'",
-                            body: """
-BUILD-STABLE: Job '${env.JOB_NAME} [${env.BRANCH_NAME}] [${env.BUILD_NUMBER}]':
-Is back to normal.
-""",
-                            to: "commits@karaf.apache.org",
-                            recipientProviders: [[$class: 'DevelopersRecipientProvider']]
-                    )
-                }
-            }
-        }
-    }
-
-}
