--- title: 发布插件 description: 了解如何与我们的社区分享你的插件 --- 了解如何与我们的社区分享你的插件。 ## 创建 Release 当你完成了你的插件并进行充分测试后,就可以在 GitHub 上创建新的 Release,其中版本规范可以参考[版本控制](./introduction.md#版本控制)。 ## 自动构建 如果你是基于 [halo-dev/plugin-starter](https://github.com/halo-dev/plugin-starter) 创建的插件项目,那么已经包含了适用于 GitHub Action 的 `workflow.yaml` 文件,里面包含了构建插件和发布插件资源到 Release 的步骤,可以根据自己的实际需要进行修改,以下是示例: ```yaml name: Build Plugin JAR File on: push: branches: - main paths: - "**" - "!**.md" release: types: - created pull_request: branches: - main paths: - "**" - "!**.md" jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: submodules: true - name: Set up JDK 17 uses: actions/setup-java@v2 with: distribution: 'temurin' cache: 'gradle' java-version: 17 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 18 - uses: pnpm/action-setup@v2.0.1 name: Install pnpm id: pnpm-install with: version: 8 run_install: false - name: Get pnpm store directory id: pnpm-cache run: | echo "::set-output name=pnpm_cache_dir::$(pnpm store path)" - uses: actions/cache@v3 name: Setup pnpm cache with: path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/widget/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Install Frontend Dependencies run: | ./gradlew pnpmInstall - name: Build with Gradle run: | # Set the version with tag name when releasing version=${{ github.event.release.tag_name }} version=${version#v} sed -i "s/version=.*-SNAPSHOT$/version=$version/1" gradle.properties ./gradlew clean build -x test - name: Archive plugin-starter jar uses: actions/upload-artifact@v2 with: name: plugin-starter path: | build/libs/*.jar retention-days: 1 github-release: runs-on: ubuntu-latest needs: build if: github.event_name == 'release' steps: - name: Download plugin-starter jar uses: actions/download-artifact@v2 with: name: plugin-starter path: build/libs - name: Get Name of Artifact id: get_artifact run: | ARTIFACT_PATHNAME=$(ls build/libs/*.jar | head -n 1) ARTIFACT_NAME=$(basename ${ARTIFACT_PATHNAME}) echo "Artifact pathname: ${ARTIFACT_PATHNAME}" echo "Artifact name: ${ARTIFACT_NAME}" echo "ARTIFACT_PATHNAME=${ARTIFACT_PATHNAME}" >> $GITHUB_ENV echo "ARTIFACT_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV echo "RELEASE_ID=${{ github.event.release.id }}" >> $GITHUB_ENV - name: Upload a Release Asset uses: actions/github-script@v2 if: github.event_name == 'release' with: github-token: ${{secrets.GITHUB_TOKEN}} script: | console.log('environment', process.versions); const fs = require('fs').promises; const { repo: { owner, repo }, sha } = context; console.log({ owner, repo, sha }); const releaseId = process.env.RELEASE_ID const artifactPathName = process.env.ARTIFACT_PATHNAME const artifactName = process.env.ARTIFACT_NAME console.log('Releasing', releaseId, artifactPathName, artifactName) await github.repos.uploadReleaseAsset({ owner, repo, release_id: releaseId, name: artifactName, data: await fs.readFile(artifactPathName) }); ``` ## 发布你的插件 用户可以在你的仓库 Release 下载使用,但为了方便让 Halo 的用户知道你的插件,可以在以下渠道发布: 1. [halo-sigs/awesome-halo](https://github.com/halo-sigs/awesome-halo):你可以向这个仓库发起一个 PR 提交的插件的信息即可。 2. [Halo 应用市场](https://www.halo.run/store/apps):Halo 官方的应用市场,但目前还不支持开发者注册和发布,如果你想发布到应用市场,可以在 PR 上说明以下,我们会暂时帮你发布。 3. [Halo 论坛](https://bbs.halo.run/t/plugins):你可以在 Halo 官方社区的插件板块发布你的插件。