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
