如何在GitHub Action中获取一次Push包含的提交数量?
获取GitHub Action中Push的提交数量并优化SFDX部署流水线
要在你的SFDX部署流水线中获取本次Push包含的提交数量,并根据提交范围生成准确的增量部署文件,可以按以下步骤操作:
1. 获取本次Push的提交数量
GitHub Actions提供了事件上下文变量github.event.before(Push前的分支提交哈希)和github.event.after(Push后的分支提交哈希),用Git命令可直接计算两者之间的提交数:
git rev-list --count ${{ github.event.before }}..${{ github.event.after }}
我们可以把这个值存入环境变量,方便后续步骤调用。
2. 动态设置增量计算的起始点
根据提交数量调整sfdx sgd:source:delta的--from参数:
- 若提交数为1(单次提交Push),用
HEAD^作为起始点 - 若提交数大于1(多次提交批量Push),用
github.event.before作为起始点,确保覆盖本次Push的所有修改
3. 修改后的完整GitHub Action配置
name: SFDX-CLI DEV Deploy from Repository on: push: branches: - develop paths: - 'force-app/**' jobs: SFDX-CLI-DEV-Deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 # 拉取完整提交历史,确保Git命令能正常计算提交范围 # 获取本次Push的提交数量并存入环境变量 - name: Get push commit count run: | COMMIT_COUNT=$(git rev-list --count ${{ github.event.before }}..${{ github.event.after }}) echo "COMMIT_COUNT=$COMMIT_COUNT" >> $GITHUB_ENV - run: npm install sfdx-cli --location=global - run: echo 'y' | sfdx plugins:install sfdx-git-delta - run: sfdx force:auth:jwt:grant --clientid ${{ secrets.DEV_CLIENTID }} --jwtkeyfile=build/serverDev.key --username ${{ secrets.DEV_USERNAME }} --setdefaultdevhubusername --instanceurl=${{ secrets.DEV_INSTANCE_URL }} --setalias dev # 根据提交数量动态设置增量起始点,生成部署用的package.xml - name: Generate delta package run: | if [ $COMMIT_COUNT -eq 1 ]; then FROM_REF="HEAD^" else FROM_REF="${{ github.event.before }}" fi sfdx sgd:source:delta --to "HEAD" --from "$FROM_REF" --output . - run: sfdx force:source:deploy -x package/package.xml -u dev
关键说明
fetch-depth: 0必须保留,否则Git无法访问github.event.before对应的提交历史- 通过
$GITHUB_ENV存储提交数量,确保后续步骤能读取到该变量 - 动态判断起始点避免了单次提交和批量提交场景下的增量遗漏问题,保证只部署本次Push中修改的文件
内容的提问来源于stack exchange,提问作者Matheus Coelho Campos
相关产品推荐
相关产品推荐

