Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
15 changes: 12 additions & 3 deletions .github/workflows/bindings_java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand Down
137 changes: 137 additions & 0 deletions .github/workflows/release_java.yml
Original file line number Diff line number Diff line change
@@ -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:
Comment on lines +21 to +26
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a few thoughts on these triggers:

  1. I keep the workflow_dispatch so that we can somehow debug the workflow. It's possible that we retain only this trigger and let the RM trigger release staging on a tag manually. But let's try to do it fully automatically now.
  2. For the tag triggers:

I create a pattern that only staging for each RC. This is because we only staging the artifacts instead of fire the release. The staging artifacts can be found at https://repository.apache.org/#stagingRepositories. For example, the last commit debugging commit staging orgapacheopendal-1012:

image

I'll click "Drop" to clean up. And a RM should "Drop" on vote failed; "Close" and later "Release" on vote passed.

Note that since we tag -rcN Git tags now, other bindings releases should filter out the trigger on RCs, or following the process here to staging on RCs.


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: ""
88 changes: 48 additions & 40 deletions bindings/java/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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",
]
3 changes: 3 additions & 0 deletions licenserc.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,7 @@ excludes = [
# Documents
"**/*.md",
"**/*.mdx",

# Third-party source files
"scripts/merge_local_staging.sh",
]
40 changes: 40 additions & 0 deletions scripts/merge_local_staging.sh
Original file line number Diff line number Diff line change
@@ -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