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

tison pushed a commit to branch auto-release-java
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git

commit cafcf2cb5c9938efbbab9264f5f78de320d93d70
Author: tison <[email protected]>
AuthorDate: Sat Aug 26 08:43:03 2023 +0800

    ci(bindings/java): enable auto staging JARs on Apache Nexus repository
    
    Signed-off-by: tison <[email protected]>
---
 .editorconfig                      |   7 +-
 .github/workflows/release_java.yml | 131 +++++++++++++++++++++++++++++++++++++
 licenserc.toml                     |   3 +
 scripts/merge_local_staging.sh     |  40 +++++++++++
 4 files changed, 179 insertions(+), 2 deletions(-)

diff --git a/.editorconfig b/.editorconfig
index 77b65fb57..c14889663 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -38,13 +38,16 @@ indent_size = 2
 [*.yml]
 indent_size = 2
 
+[*.toml]
+indent_size = 2
+
 [*.json]
 indent_size = 2
 
-[*.{ts, tsx}]
+[*.{ts,tsx}]
 indent_size = 2
 
-[*.{js, jsx}]
+[*.{js,jsx}]
 indent_size = 2
 
 [*.css]
diff --git a/.github/workflows/release_java.yml 
b/.github/workflows/release_java.yml
new file mode 100644
index 000000000..ce038178a
--- /dev/null
+++ b/.github/workflows/release_java.yml
@@ -0,0 +1,131 @@
+# 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: Bindings Java Release
+
+on:
+  push:
+    branches:
+      # FIXME test-only; remove before merge
+      - auto-release-java
+    tags:
+      # Staging JARs on Apache Nexus repository for RCs. Read more on
+      # 
https://opendal.apache.org/docs/contributing/release#release-maven-artifacts
+      - 'v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+'
+  workflow_dispatch:
+
+jobs:
+  stage-snapshot:
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        include:
+          - os: ubuntu-latest
+            classifier: linux-x86_64
+          - os: windows-latest
+            classifier: windows-x86_64
+          - os: macos-latest
+            classifier: osx-x86_64
+          - os: macos-latest
+            classifier: osx-aarch_64
+    steps:
+      - uses: actions/checkout@v3
+      - name: Set up JDK 8
+        uses: actions/setup-java@v3
+        with:
+          distribution: 'temurin'
+          java-version: '8'
+          cache: 'maven'
+          server-id: apache.releases.https
+          server-username: MAVEN_USERNAME
+          server-password: MAVEN_CENTRAL_TOKEN
+          gpg-private-key: ${{ secrets.GPG_SECRET_KEY }}
+      - uses: actions/setup-python@v4
+        with:
+          python-version: '3.10'
+      - name: Local staging
+        working-directory: bindings/java
+        run: |
+          mvn -Papache-release package verify 
org.sonatype.plugins:nexus-staging-maven-plugin:deploy "-Djni.classifier=${{ 
matrix.classifier }}" -DskipTests=true -DaltStagingDirectory=local-staging 
-DskipRemoteStaging=true "-DserverId=apache.releases.https" 
"-DnexusUrl=https://repository.apache.org";
+        env:
+          MAVEN_USERNAME: ${{ secrets.NEXUS_STAGE_DEPLOYER_USER }}
+          MAVEN_CENTRAL_TOKEN: ${{ secrets.NEXUS_STAGE_DEPLOYER_PW }}
+      - name: Upload local staging directory
+        uses: actions/upload-artifact@v3
+        with:
+          name: ${{ matrix.classifier }}-local-staging
+          path: bindings/java/local-staging
+          if-no-files-found: error
+
+  deploy-staged-snapshots:
+    runs-on: ubuntu-latest
+    needs: [stage-snapshot]
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          repository: apache/incubator-opendal
+          ref: ${{ inputs.ref }}
+      - name: Set up JDK 8
+        uses: actions/setup-java@v3
+        with:
+          distribution: 'temurin'
+          java-version: '8'
+          cache: 'maven'
+          server-id: apache.releases.https
+          server-username: MAVEN_USERNAME
+          server-password: MAVEN_CENTRAL_TOKEN
+          gpg-private-key: ${{ secrets.GPG_SECRET_KEY }}
+
+      - name: Prepare environment variables
+        run: echo "LOCAL_STAGING_DIR=$HOME/local-staging" >> $GITHUB_ENV
+
+      - name: Download windows staging directory
+        uses: actions/download-artifact@v3
+        with:
+          name: windows-x86_64-local-staging
+          path: ~/windows-x86_64-local-staging
+      - name: Download linux staging directory
+        uses: actions/download-artifact@v3
+        with:
+          name: linux-x86_64-local-staging
+          path: ~/linux-x86_64-local-staging
+      - name: Download darwin staging directory
+        uses: actions/download-artifact@v3
+        with:
+          name: osx-x86_64-local-staging
+          path: ~/osx-x86_64-local-staging
+      - name: Download darwin (aarch64) staging directory
+        uses: actions/download-artifact@v3
+        with:
+          name: osx-aarch_64-local-staging
+          path: ~/osx-aarch_64-local-staging
+
+      - uses: actions/checkout@v3
+        with:
+          path: ci-opendal
+      - name: Merge staging repositories
+        working-directory: ci-opendal
+        run: bash ./scripts/merge_local_staging.sh $LOCAL_STAGING_DIR/staging 
~/windows-x86_64-local-staging/staging ~/linux-x86_64-local-staging/staging 
~/osx-x86_64-local-staging/staging ~/osx-aarch_64-local-staging/staging
+
+      - name: Deploy local staged artifacts
+        if: ${{ github.event_name != 'pull_request' }}
+        working-directory: bindings/java
+        run: |
+          mvn org.sonatype.plugins:nexus-staging-maven-plugin:deploy-staged 
-DaltStagingDirectory=$LOCAL_STAGING_DIR -DskipStagingRepositoryClose=true 
-DserverId=apache.releases.https -DnexusUrl=https://repository.apache.org
+        env:
+          MAVEN_USERNAME: ${{ secrets.NEXUS_STAGE_DEPLOYER_USER }}
+          MAVEN_CENTRAL_TOKEN: ${{ secrets.NEXUS_STAGE_DEPLOYER_PW }}
diff --git a/licenserc.toml b/licenserc.toml
index f4ea72855..7d83bcc2d 100644
--- a/licenserc.toml
+++ b/licenserc.toml
@@ -35,4 +35,7 @@ excludes = [
   # Documents
   "**/*.md",
   "**/*.mdx",
+
+  # Third-party source files
+  "scripts/merge_local_staging.sh",
 ]
diff --git a/scripts/merge_local_staging.sh b/scripts/merge_local_staging.sh
new file mode 100644
index 000000000..d28445df3
--- /dev/null
+++ b/scripts/merge_local_staging.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# ----------------------------------------------------------------------------
+# Copyright 2021 The Netty Project
+#
+# The Netty Project 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:
+#
+#   https://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.
+# ----------------------------------------------------------------------------
+
+# This file is copied from
+# 
https://github.com/netty/netty-tcnative/blob/67a73e0c/.github/scripts/merge_local_staging.sh
+
+set -e
+if [ "$#" -lt 2 ]; then
+    echo "Expected target directory and at least one local staging directory"
+    exit 1
+fi
+TARGET=$1
+
+for ((i=2; i<=$#; i++))
+do
+  DIR="${!i}"
+  SUB_DIR=$(ls -d "${DIR}"/* | awk -F / '{print $NF}')
+
+  if [ ! -d "${TARGET}/${SUB_DIR}" ]
+  then
+      mkdir -p "${TARGET}/${SUB_DIR}"
+  fi
+  cat "${DIR}"/"${SUB_DIR}"/.index >> "${TARGET}/${SUB_DIR}"/.index
+  cp -r "${DIR}"/"${SUB_DIR}"/* "${TARGET}/${SUB_DIR}"/
+done

Reply via email to