检查自最新标记以来是否有新的提交



目前,我有以下GitHub工作流来标记存储库主分支上的夜间快照:

name: Nightly Snapshot
on:
schedule:
- cron: "0 0 * * *"
jobs:
tag:
name: Tag
runs-on: linux-latest
steps:
- name: Checkout master branch
uses: actions/checkout@v2
with:
ref: 'master'
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
- name: Tag snapshot
uses: tvdias/github-tagger@v0.0.1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ steps.date.outputs.date }}

但是,并不总是有新的提交到master分支。我想修改工作流,只在创建最新标记后有新提交的情况下创建新标记。我该怎么做?

这应该足以让你走上正确的道路,我还没有测试代码,但想法都在那里。

  1. 将SHA发送到您当前的主机
- name: Get Git SHA
id: gitsha
run: echo "::set-output name=gitsha::$(git rev-parse HEAD)"
  1. 获取所有标签
- uses: actions/checkout@v2
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
  1. 获取创建的最后一个标记,方法是获取昨天的日期,然后获取该标记并输出提交SHA
- name: Get yesterdays date
id: ydate
run: echo "::set-output name=ydate::$(date -d "yesterday 13:00" +'%Y-%m-%d')"
- uses: actions/checkout@v2
with:
ref: refs/tags/${{ steps.ydate.outputs.ydate }}
- name: Get Yesterdays Git SHA
id: ygitsha
run: echo "::set-output name=ygitsha::$(git rev-parse HEAD)"
  1. 如果它们相同,请不要进行另一次部署
- name: Deploy if anything has changed
if: steps.ygitsha.outputs.ygitsha == steps.gitsha.outputs.gitsha
run: <your code>

听起来你可能还想循环并检查标签的存在,直到找到最后一个,在这种情况下,只需从日期中再减去1,然后使用类似的方法来检查标签是否存在并循环直到找到标签。

if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "tag exists";
else
echo "tag does not exist"
fi

请参阅此。只有当标签deployment被推送时,此工作流才会触发部署。尽管如此,每次提交master时都会触发构建。

最新更新