You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/07/24 12:36:41 UTC

[camel] 01/01: (chores) ci: restore component-test

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

nfilotto pushed a commit to branch restore-component-test
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 584bee24549452f12cceb7a060ccf9846499197f
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Mon Jul 24 14:36:13 2023 +0200

    (chores) ci: restore component-test
---
 .github/actions/component-test/action.yaml       | 88 ++++++++++++++++++++++++
 .github/actions/component-test/component-test.sh | 53 ++++++++++++++
 .github/workflows/pr-comment.yml                 | 75 ++++++++++++++++++++
 3 files changed, 216 insertions(+)

diff --git a/.github/actions/component-test/action.yaml b/.github/actions/component-test/action.yaml
new file mode 100644
index 00000000000..2d7737a038c
--- /dev/null
+++ b/.github/actions/component-test/action.yaml
@@ -0,0 +1,88 @@
+#
+# 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: "Component Test Runner"
+description: "Runs tests of corresponding to the given comment"
+inputs:
+  github-token:
+    description: 'GitHub token to use to update the comment'
+    required: true
+  run-id:
+    description: 'Id of the job'
+    required: true
+  pr-id:
+    description: 'Id of the pull request to update'
+    required: true
+  comment-id:
+    description: 'Id of the comment to process'
+    required: true
+  comment-body:
+    description: 'Body of the comment to process'
+    required: true
+runs:
+  using: "composite"
+  steps:
+    - id: install-mvnd
+      uses: ./.github/actions/install-mvnd
+    - name: maven build
+      shell: bash
+      run: ${{ github.action_path }}/component-test.sh ${{ steps.install-mvnd.outputs.mvnd-dir }}/mvnd "${{ inputs.comment-body }}" true build.log
+    - name: archive logs
+      uses: actions/upload-artifact@v3
+      if: always()
+      with:
+        name: build.log
+        path: build.log
+    - name: maven test
+      shell: bash
+      run: ${{ github.action_path }}/component-test.sh ${{ steps.install-mvnd.outputs.mvnd-dir }}/mvnd "${{ inputs.comment-body }}" false tests.log
+    - name: archive logs
+      uses: actions/upload-artifact@v3
+      if: always()
+      with:
+        name: tests.log
+        path: tests.log
+    - name: Success comment
+      if: success()
+      uses: actions/github-script@v6
+      with:
+        github-token: ${{ inputs.github-token }}
+        script: |
+          await github.rest.issues.updateComment({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                issue_number: ${{ inputs.pr-id }},
+                comment_id: ${{ inputs.comment-id }},
+                body: `${{ inputs.comment-body }}
+
+          **Result** :white_check_mark: The tests passed successfully`
+          });
+    - name: Failure comment
+      if: failure()
+      uses: actions/github-script@v6
+      with:
+        github-token: ${{ inputs.github-token }}
+        script: |
+          await github.rest.issues.updateComment({
+                owner: context.repo.owner,
+                repo: context.repo.repo,
+                issue_number: ${{ inputs.pr-id }},
+                comment_id: ${{ inputs.comment-id }},
+                body: `${{ inputs.comment-body }}
+
+          **Result** :x: The tests failed please [check the logs](https://github.com/apache/camel/actions/runs/${{ inputs.run-id }})`
+          });
diff --git a/.github/actions/component-test/component-test.sh b/.github/actions/component-test/component-test.sh
new file mode 100755
index 00000000000..68efe60e73a
--- /dev/null
+++ b/.github/actions/component-test/component-test.sh
@@ -0,0 +1,53 @@
+#
+# 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.
+#
+
+echo "Using MVND_OPTS=$MVND_OPTS"
+
+function main() {
+  local mavenBinary=${1}
+  local commentBody=${2}
+  local fastBuild=${3}
+  local log=${4}
+
+  if [[ ${commentBody} = /component-test* ]] ; then
+    local componentList="${commentBody:16}"
+    echo "The list of components to test is ${componentList}"
+  else
+    echo "No components has been detected, the expected format is '/component-test (camel-)component-name1 (camel-)component-name2...'"
+    exit 1
+  fi
+  local pl=""
+  for component in ${componentList}
+  do
+    if [[ ${component} = camel-* ]] ; then
+      pl="$pl,components/${component}"
+    else
+      pl="$pl,components/camel-${component}"
+    fi
+  done
+  pl="${pl:1}"
+
+  if [[ ${fastBuild} = "true" ]] ; then
+    echo "Launching a fast build against the projects ${pl} and their dependencies"
+    $mavenBinary -l $log $MVND_OPTS -Dquickly install -pl "$pl" -am
+  else
+    echo "Launching tests of the projects ${pl}"
+    $mavenBinary -l $log $MVND_OPTS install -pl "$pl"
+  fi
+}
+
+main "$@"
diff --git a/.github/workflows/pr-comment.yml b/.github/workflows/pr-comment.yml
new file mode 100644
index 00000000000..9463ab2d2e0
--- /dev/null
+++ b/.github/workflows/pr-comment.yml
@@ -0,0 +1,75 @@
+#
+# 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: PR Comment Build
+
+on:
+  issue_comment:
+    types: [created]
+jobs:
+  pr_commented:
+    name: PR comment
+    if: ${{ github.repository == 'apache/camel' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/component-test') }}
+    permissions:
+      pull-requests: write # to comment on a pull request
+      actions: read # to download artifact
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        java: [ '17' ]
+    steps:
+      - uses: actions/github-script@v6
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          script: |
+            github.rest.issues.createComment({
+              issue_number: context.issue.number,
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              body: `:robot: The Apache Camel test robot will run the tests for you :+1:`
+            })
+      - name: Retrieve sha
+        uses: actions/github-script@v6
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          script: |
+            const pr = await github.rest.pulls.get({
+                  owner: context.repo.owner,
+                  repo: context.repo.repo,
+                  pull_number: context.issue.number
+            });
+            core.exportVariable('pr_sha', pr.data.head.sha)
+      - uses: actions/checkout@v3
+        with:
+          ref: ${{ env.pr_sha }}
+      - id: install-packages
+        uses: ./.github/actions/install-packages
+      - name: Set up JDK ${{ matrix.java }}
+        uses: actions/setup-java@v3
+        with:
+          distribution: 'temurin'
+          java-version: ${{ matrix.java }}
+          cache: 'maven'
+      - id: test
+        name: Component test execution
+        uses: ./.github/actions/component-test
+        with:
+          github-token: ${{ secrets.GITHUB_TOKEN }}
+          run-id: ${{ github.run_id }}
+          pr-id: ${{ github.event.issue.number }}
+          comment-id: ${{ github.event.comment.id }}
+          comment-body: ${{ github.event.comment.body }}