• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# When a new release is created, publish artifacts to Maven Central / JetBrains Marketplace / etc..
2#
3# About secrets used here:
4# 1. OSSRH_USERNAME, OSSRH_TOKEN: token obtained from https://oss.sonatype.org/
5# 2. OSSRH_GPG_SECRET_KEY - private key for signing Maven artifacts
6# 3. OSSRH_GPG_SECRET_KEY_PASSWORD - password for unlocking OSSRH_GPG_SECRET_KEY
7# 4. JETBRAINS_MARKETPLACE_TOKEN - token obtained from https://plugins.jetbrains.com/author/me/tokens
8
9name: Publish package to Maven Central and JetBrains Marketplace
10on:
11  release:
12    types: [created]
13  workflow_dispatch:
14    inputs:
15      release_tag:
16        description: 'Release tag'
17        required: true
18        type: string
19jobs:
20  publish:
21    runs-on: ubuntu-latest
22    steps:
23      - uses: actions/checkout@v4
24        with:
25          ref: ${{ github.events.release.tag_name || inputs.release_tag || github.ref }}
26      - name: Set up Maven Central Repository
27        uses: actions/setup-java@v4
28        with:
29          java-version: 17
30          server-id: ossrh
31          server-username: MAVEN_USERNAME
32          server-password: MAVEN_PASSWORD
33          distribution: zulu
34      - id: install-secret-key
35        name: Install gpg secret key
36        run: |
37          cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import
38          gpg --list-secret-keys --keyid-format LONG
39      - id: publish-to-central
40        name: Publish to Maven Central Repository
41        env:
42          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
43          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
44        run: |
45          mvn \
46            --no-transfer-progress \
47            --batch-mode \
48            -Dgpg.passphrase=${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} \
49            -Prelease clean deploy
50      - name: Publish IntelliJ plugin to JetBrains Marketplace
51        run: |
52          pushd ktfmt_idea_plugin
53          ./gradlew publishPlugin --stacktrace --no-daemon
54          popd
55        env:
56          JETBRAINS_MARKETPLACE_TOKEN: ${{ secrets.JETBRAINS_MARKETPLACE_TOKEN }}
57      - uses: actions/setup-node@v4
58      - name: Deploy website
59        run: |
60          KTFMT_TMP_DIR=$(mktemp -d)
61
62          pushd website
63          npm install .
64          KTFMT_WEBSITE_OUTPUT_DIR="$KTFMT_TMP_DIR" gulp build-website
65          popd
66
67          git fetch
68          git checkout gh-pages
69          git config user.email ktfmt@facebook.com
70          git config user.name ktfmt
71
72          rm -rf *
73          cp -R "$KTFMT_TMP_DIR"/* .
74
75          git add .
76          git commit -m "Publish website"
77          git push --force
78
79          rm -rf "$KTFMT_TMP_DIR"
80