From 6f49d5938068393fb6fe0a46e220a51fe27cf7eb Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sat, 8 Aug 2026 14:11:04 +0900 Subject: [PATCH] =?UTF-8?q?ci:=20=E5=85=AC=E9=96=8B=E7=B3=BB=E3=82=B7?= =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=83=AC=E3=83=83=E3=83=88=E3=81=AE=E7=96=8E?= =?UTF-8?q?=E9=80=9A=E7=A2=BA=E8=AA=8D=E3=83=AF=E3=83=BC=E3=82=AF=E3=83=95?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CD が使う認証情報の正しさは、名前の一致では確かめられず実際に接続するまで分からない。 タグを打ってから publish 段階で落ちるのを避けるため、手動起動で疎通だけを確かめる。 いずれのジョブも成果物を公開しない。Plugin Portal は --validate-only で検証のみ行い、 Central は上書き前提の snapshot リポジトリへ発行する。自版から -SNAPSHOT が外れた後の起動で 本物のデプロイを作らないよう、Central 側は版が SNAPSHOT であることを発行前に確かめる。 初回リリース前の一時的なワークフローであり、確認が済んだら削除する。 Co-Authored-By: Claude Opus 5 --- .github/workflows/verify-publishing.yml | 77 +++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 .github/workflows/verify-publishing.yml diff --git a/.github/workflows/verify-publishing.yml b/.github/workflows/verify-publishing.yml new file mode 100644 index 0000000..d8cd347 --- /dev/null +++ b/.github/workflows/verify-publishing.yml @@ -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