Skip to content

Commit

Permalink
ENH: Add Github workflow to update the "nightly-main" branch daily
Browse files Browse the repository at this point in the history
Introduce a new workflow that updates the 'nightly-main' preview branch
daily at 04:00 UTC. This scheduled workflow ensures it runs after Kitware-hosted nightly
builds, aligned with the dashboards' 11:00 PM ET trigger time.
  • Loading branch information
jcfr committed Sep 22, 2024
1 parent fb06d97 commit a202448
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
100 changes: 100 additions & 0 deletions .github/workflows/update-slicer-preview-branch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: Update Preview Branch

on:
schedule:
# Daily at 04:00 AM UTC (this corresponds to the time set in CTestConfig.cmake + 1 hour)
#
# This workflow is synchronized with the nightly builds on the Kitware-hosted dashboards,
# which are configured via crontab to trigger daily at 11:00 PM Eastern Time (ET). The conversion
# from ET to UTC depends on whether daylight saving time is in effect:
#
# - During the spring/summer months (typically March to November), Eastern Daylight Time (EDT),
# which is UTC-04:00, is observed. Thus, 11:00 PM EDT corresponds to 03:00 AM UTC.
# - During the autumn/winter months (typically November to March), Eastern Standard Time (EST),
# which is UTC-05:00, is observed. Thus, 11:00 PM EST corresponds to 04:00 AM UTC.
#
# The build jobs are configured to start via the crontab on the Kitware-hosted dashboards at
# 11:00 PM ET, and this workflow is scheduled to run daily at 04:00 AM UTC to ensure it executes
# after the nightly builds have started and completed their source checkout, regardless of daylight
# saving time.
#
# This is important because the preview branch should be updated to reflect the state of the
# repository as of the latest nightly build.
- cron: "0 4 * * *"
# Manual trigger
workflow_dispatch:

permissions:
contents: read

jobs:
update-slicer-preview-branch:
permissions:
# Needed in publish step to update the preview branch
contents: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
ref: main
# The 'fetch-depth' option ensures that a sufficient number of commits are retrieved (250)
# to allow the "git rev-parse" command used below to accurately reference a commit based
# on time.
# This mitigates potential warnings that occur when there aren't enough commits fetched,
# such as:
# warning: log for 'main' only goes back to ...
# We assume no more than 250 commits are made in a single day.
fetch-depth: 250

#- name: Display current timezone
# run: |
# cat /etc/timezone

# - name: Install time zone and daylight-saving time data
# run: |
# sudo apt-get -y install tzdata
# sudo timedatectl set-timezone "US/Eastern"
# env:
# DEBIAN_FRONTEND: noninteractive

#- name: Display current timezone
# run: |
# cat /etc/timezone

- name: "Convert dashboard start time from ET to UTC"
id: convert
run: |
# time=$(TZ=":US/Eastern" date -d"2024-09-20 23:00:00" "+%H:%M:%S %z")
time=$(TZ=":US/Eastern" date -d"2024-09-20 23:00:00" "+%Y%m%d %H:%M:%S %z")
echo "time [$time]"
echo "time=$time" >> $GITHUB_OUTPUT
- name: "Retrieve preview branch SHA"
id: retrieve
run: |
git log -n3 origin/main
sha=$(TZ=":US/Eastern" git rev-list -1 --before="${TIME}" main)
echo "sha [$sha]"
echo "sha=$sha" >> $GITHUB_OUTPUT
env:
TIME: ${{ steps.convert.outputs.time }}

- uses: actions/create-github-app-token@5d869da34e18e7287c1daad50e0b8ea0f506ce69 # v1.11.0
id: app-token
with:
app-id: ${{ vars.SLICER_APP_ID }}
private-key: ${{ secrets.SLICER_APP_PRIVATE_KEY }}

- name: "Publish"
run: |
if [ -z "$SHA" ]; then
echo "::error ::Failed to retrieve SHA"
exit 1
fi
remote=https://${SLICERBOT_GITHUB_TOKEN}@github.com/${REPOSITORY}.git
git push $remote $SHA:refs/heads/${PREVIEW_BRANCH} --force
env:
SHA: ${{ steps.retrieve.outputs.sha }}
SLICERBOT_GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
REPOSITORY: ${{ github.repository }}
PREVIEW_BRANCH: nightly-main
4 changes: 4 additions & 0 deletions CTestConfig.cmake
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
set(CTEST_PROJECT_NAME "Slicer")

# If the nightly start time is updated, ensure the corresponding change is reflected
# in ".github/workflows/update-slicer-preview-branch.yml" and in the crontab or task scheduler
# of the Kitware-hosted dashboards to maintain synchronization across all systems.
set(CTEST_NIGHTLY_START_TIME "3:00:00 UTC")

if(NOT DEFINED CDASH_PROJECT_NAME)
Expand Down

0 comments on commit a202448

Please sign in to comment.