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

xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 30b78549d ci(bindings/java): enable auto staging JARs on Apache Nexus 
repository (#2939)
30b78549d is described below

commit 30b78549d948ddd7a60c4bd10ea02e4e7eb58562
Author: tison <[email protected]>
AuthorDate: Sun Aug 27 15:40:26 2023 +0800

    ci(bindings/java): enable auto staging JARs on Apache Nexus repository 
(#2939)
---
 .editorconfig                       |   7 +-
 .github/workflows/bindings_java.yml |  15 +++-
 .github/workflows/release_java.yml  | 137 ++++++++++++++++++++++++++++++++++++
 bindings/java/Cargo.toml            |  88 ++++++++++++-----------
 licenserc.toml                      |   3 +
 scripts/merge_local_staging.sh      |  40 +++++++++++
 6 files changed, 245 insertions(+), 45 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/bindings_java.yml 
b/.github/workflows/bindings_java.yml
index f2584c837..169b2935b 100644
--- a/.github/workflows/bindings_java.yml
+++ b/.github/workflows/bindings_java.yml
@@ -57,7 +57,13 @@ jobs:
         run: ./mvnw spotless:check
 
   test:
-    runs-on: ubuntu-latest
+    runs-on: ${{ matrix.os }}
+    strategy:
+      matrix:
+        include:
+          - os: ubuntu-latest
+          - os: windows-latest
+          - os: macos-latest
     steps:
       - uses: actions/checkout@v3
       - name: Set up JDK 8
@@ -66,8 +72,11 @@ jobs:
           distribution: 'temurin'
           java-version: '8'
           cache: 'maven'
-      - name: Set up protoc
-        run: sudo apt install -y protobuf-compiler
+      - name: Install Protoc
+        uses: arduino/setup-protoc@v2
+        with:
+          version: "23.4"
+          repo-token: ${{ secrets.GITHUB_TOKEN }}
       - name: Build and test
         working-directory: bindings/java
         # `install` is required to verify reproducible builds:
diff --git a/.github/workflows/release_java.yml 
b/.github/workflows/release_java.yml
new file mode 100644
index 000000000..4b9223f6c
--- /dev/null
+++ b/.github/workflows/release_java.yml
@@ -0,0 +1,137 @@
+# 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:
+    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 }}
+          gpg-passphrase: MAVEN_GPG_PASSPHRASE
+      - uses: actions/setup-python@v4
+        with:
+          python-version: '3.10'
+      - name: Install Protoc
+        uses: arduino/setup-protoc@v2
+        with:
+          version: "23.4"
+          repo-token: ${{ secrets.GITHUB_TOKEN }}
+      - name: Local staging
+        working-directory: bindings/java
+        run: |
+          ./mvnw -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 }}
+          MAVEN_GPG_PASSPHRASE: ""
+      - 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 }}
+          gpg-passphrase: MAVEN_GPG_PASSPHRASE
+
+      - 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: |
+          ./mvnw 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 }}
+          MAVEN_GPG_PASSPHRASE: ""
diff --git a/bindings/java/Cargo.toml b/bindings/java/Cargo.toml
index 94a495675..7d94cd71b 100644
--- a/bindings/java/Cargo.toml
+++ b/bindings/java/Cargo.toml
@@ -41,44 +41,52 @@ tokio = { version = "1.28.1", features = ["full"] }
 [dependencies.opendal]
 workspace = true
 features = [
-    "services-azblob",
-    "services-azdfs",
-    "services-cacache",
-    "services-cos",
-    "services-dashmap",
-    "services-dropbox",
-    "services-etcd",
-    # FIXME this requires a preinstalled fdb library
-    # "services-foundationdb",
-    "services-fs",
-    "services-ftp",
-    "services-gcs",
-    "services-gdrive",
-    "services-ghac",
-    # FIXME how to support HDFS services in bindings?
-    # "services-hdfs",
-    "services-http",
-    "services-ipfs",
-    "services-memcached",
-    "services-memory",
-    "services-mini-moka",
-    "services-moka",
-    "services-obs",
-    "services-onedrive",
-    "services-oss",
-    "services-persy",
-    "services-postgresql",
-    "services-redb",
-    "services-redis",
-    "services-redis-rustls",
-    "services-rocksdb",
-    "services-s3",
-    "services-sftp",
-    "services-sled",
-    "services-supabase",
-    "services-tikv",
-    "services-vercel-artifacts",
-    "services-wasabi",
-    "services-webdav",
-    "services-webhdfs",
+  "services-azblob",
+  "services-azdfs",
+  "services-cacache",
+  "services-cos",
+  "services-dashmap",
+  "services-dropbox",
+  "services-etcd",
+  # FIXME this requires a preinstalled fdb library
+  # "services-foundationdb",
+  "services-fs",
+  "services-ftp",
+  "services-gcs",
+  "services-gdrive",
+  "services-ghac",
+  # FIXME how to support HDFS services in bindings?
+  # "services-hdfs",
+  "services-http",
+  "services-ipfs",
+  "services-memcached",
+  "services-memory",
+  "services-mini-moka",
+  "services-moka",
+  "services-obs",
+  "services-onedrive",
+  "services-oss",
+  "services-persy",
+  "services-postgresql",
+  "services-redb",
+  "services-redis",
+  "services-redis-rustls",
+  "services-rocksdb",
+  "services-s3",
+  "services-sled",
+  "services-supabase",
+  "services-tikv",
+  "services-vercel-artifacts",
+  "services-wasabi",
+  "services-webdav",
+  "services-webhdfs",
+]
+
+# This is not optimal. See also the Cargo issue:
+# https://github.com/rust-lang/cargo/issues/1197#issuecomment-1641086954
+[target.'cfg(unix)'.dependencies.opendal]
+workspace = true
+features = [
+  # Depend on "openssh" which depends on "tokio-pipe" that is unavailable on 
Windows.
+  "services-sftp",
 ]
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