Scala多模块项目:如何仅在发布时触发GitHub Actions发布任务?
关于Scala多模块项目GitHub Actions发布触发的问题解答
是否需要通过打标签标记发布?
不一定必须用标签,但语义化版本标签(如v1.0.0)是GitHub生态里通用的发布标记方案——它能直接和项目版本号绑定,方便追溯发布记录,也能让团队清晰识别正式发布的节点。如果你的发布流程是基于版本迭代的,打标签会是非常合适的选择。当然你也可以用GitHub的Release功能(对应你现有配置里的release事件),但标签触发的方式更轻量化,适配自动化发布场景。
如何通过标签检测触发publish任务?
你需要给publish任务添加执行条件,让它仅在推送符合规则的标签时运行。结合你现有的Workflow,具体修改如下:
- 保留现有
on.push中的tags: ['v*.*.*']配置,确保推送这类格式的标签时能触发Workflow。 - 给
publish任务添加if条件,限制只有触发源是标签推送时才执行。 - 修复你现有Workflow中
publish任务的Checkout步骤(缺少uses字段,会导致执行报错)。
修改后的完整Workflow示例:
name: Build my projects on: push: paths-ignore: - 'images/**' - README.md branches: - master tags: - 'v*.*.*' pull_request: branches: - master release: types: [ created ] env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: test: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: Cache ivy2 uses: actions/cache@v1 with: path: ~/.ivy2/cache key: ${{ runner.os }}-sbt-ivy-cache-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }} - name: SBT Test run: sbt clean test publish: needs: test # 仅在推送v*.*.*格式的标签时执行发布 if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 - name: SBT Publish run: sbt publish
额外说明
- 如果你同时想支持通过GitHub Release(手动创建Release)触发发布,可以把
publish任务的条件改成:
这样两种发布操作都能触发if: startsWith(github.ref, 'refs/tags/v') || (github.event_name == 'release' && github.event.action == 'created')publish任务。 - 确保你的sbt项目已经正确配置了GitHub Packages的发布参数(如凭证、仓库地址),否则
publish步骤会执行失败。
内容的提问来源于stack exchange,提问作者joesan
相关产品推荐
相关产品推荐

