You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala多模块项目:如何仅在发布时触发GitHub Actions发布任务?

关于Scala多模块项目GitHub Actions发布触发的问题解答

是否需要通过打标签标记发布?

不一定必须用标签,但语义化版本标签(如v1.0.0)是GitHub生态里通用的发布标记方案——它能直接和项目版本号绑定,方便追溯发布记录,也能让团队清晰识别正式发布的节点。如果你的发布流程是基于版本迭代的,打标签会是非常合适的选择。当然你也可以用GitHub的Release功能(对应你现有配置里的release事件),但标签触发的方式更轻量化,适配自动化发布场景。

如何通过标签检测触发publish任务?

你需要给publish任务添加执行条件,让它仅在推送符合规则的标签时运行。结合你现有的Workflow,具体修改如下:

  1. 保留现有on.push中的tags: ['v*.*.*']配置,确保推送这类格式的标签时能触发Workflow。
  2. 给publish任务添加if条件,限制只有触发源是标签推送时才执行。
  3. 修复你现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:10:33