name: Trigger nightly build on: schedule: # * is a special character in YAML, so you have to quote this string - cron: '00 15 * * *' workflow_dispatch: jobs: check_date: runs-on: ubuntu-latest name: Check latest commit outputs: should_run: ${{ steps.should_run.outputs.should_run }} steps: - uses: actions/checkout@v4 - name: print latest_commit run: echo ${{ github.sha }} - id: should_run continue-on-error: true name: check latest commit is less than a day if: ${{ github.event_name == 'schedule' }} run: test -z $(git rev-list --after="24 hours" ${{ github.sha }}) && echo "::set-output name=should_run::false" trigger-nightly: needs: check_date if: ${{ needs.check_date.outputs.should_run != 'false' }} name: Push tag for nightly build runs-on: ubuntu-latest steps: - name: 'Checkout' uses: actions/checkout@v4 with: token: ${{ secrets.NIGHTLY_BUILD_GH_TOKEN }} fetch-depth: 0 - name: 'Push new tag' run: | git config user.name "${GITHUB_ACTOR}" git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" # A previous release was created using a lightweight tag # git describe by default includes only annotated tags # git describe --tags includes lightweight tags as well DESCRIBE=`git tag -l --sort=-v:refname | grep -v nightly | head -n 1` MAJOR_VERSION=`echo $DESCRIBE | awk '{split($0,a,"."); print a[1]}'` MINOR_VERSION=`echo $DESCRIBE | awk '{split($0,a,"."); print a[2]}'` # MINOR_VERSION="$((${MINOR_VERSION} + 1))" TAG="${MAJOR_VERSION}.${MINOR_VERSION}.0-nightly.$(date +'%Y%m%d')" git tag -a $TAG -m "$TAG: nightly build" git push origin $TAG - name: 'Clean up nightly releases' uses: dev-drprasad/delete-older-releases@v0.3.2 with: keep_latest: 2 delete_tags: true delete_tag_pattern: nightly env: GITHUB_TOKEN: ${{ secrets.NIGHTLY_BUILD_GH_TOKEN }}