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