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