Skip to content
Merged
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
77 changes: 77 additions & 0 deletions .github/workflows/verify-publishing.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# 公開系シークレットの疎通確認(docs/チェックリスト.md §8)。初回リリース前に、CD が使う認証情報が
# 実際に通ることをリモートで確かめるための一時的なワークフローで、確認が済んだら削除する。
# 手動起動のみとし、いずれのジョブも成果物を公開しない
# (Plugin Portal は検証のみ・Central は上書き前提の snapshot リポジトリ)。
# アクションはコミットハッシュで固定する(末尾コメントの vX.Y.Z は参照用)
name: verify-publishing

on:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false

jobs:
# Plugin Portal は SNAPSHOT 版を受け付けず、版の形式だけで検証前に失敗する。
# 認証情報まで到達させるため、自版から -SNAPSHOT を落とした版で起動する(--validate-only のため公開はされない)
plugin-portal:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: temurin
java-version: 17
- uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
- env:
GRADLE_PUBLISH_KEY: ${{ secrets.GRADLE_PUBLISH_KEY }}
GRADLE_PUBLISH_SECRET: ${{ secrets.GRADLE_PUBLISH_SECRET }}
# 版が SNAPSHOT でなくなると vanniktech は署名を必須にするため、署名の設定もここで渡す
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_IN_MEMORY_KEY }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_IN_MEMORY_KEY_PASSWORD }}
run: |
set -euo pipefail
release=$(sed -n 's/^enumizerVersion=//p' gradle.properties | sed 's/-SNAPSHOT$//')
./gradlew :sealed-class-enumizer-gradle-plugin:publishPlugins --validate-only \
-PenumizerVersion="$release"

# Central は snapshot リポジトリへの発行で確かめる(同一版が上書きされる領域で、リリースは作られない)。
# 署名鍵も同時に通るため、CD が使う 4 つのシークレットのうち Central 系と署名系がここで確認できる
central-snapshot:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
with:
distribution: temurin
java-version: 17
- uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
- uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/.konan
key: konan-${{ runner.os }}-${{ hashFiles('gradle/libs.versions.toml') }}
# 自版から -SNAPSHOT が外れた後にこのワークフローを起動すると、確認のつもりで本物のデプロイを
# 作ってしまう。版が SNAPSHOT であることを発行前に確かめる
- name: Ensure snapshot version
run: |
set -euo pipefail
version=$(./gradlew -q properties --property version | sed -n 's/^version: //p')
case "$version" in
*-SNAPSHOT) ;;
*)
echo "::error::$version is not a snapshot; this workflow must not create a real deployment"
exit 1
;;
esac
- env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_IN_MEMORY_KEY }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_IN_MEMORY_KEY_PASSWORD }}
run: ./gradlew publishToMavenCentral