From 3142464ff7bcd7b0fe05d728a55590e6c7edd74d Mon Sep 17 00:00:00 2001 From: "Bobby R. Bruce" Date: Mon, 1 Jul 2024 12:36:56 -0700 Subject: [PATCH] misc: Add 'scheduler.yaml' workflow (#1307) This is made to run on the 'stable' branch to schedule workflow runs on the `develop` branch. This solves the problem of GitHub Workflows being scheduled to only run on 'stable' branch' thus ignoring changes made to them on 'develop' With this schedule we no longer need to force a checkout of 'develop' in the workflows. As such these have been removed. The scheduled workflows are now triggered via "workflow_dispatch" via the "scheduler.yaml" workflow --- .github/workflows/compiler-tests.yaml | 13 +--- .github/workflows/daily-tests.yaml | 33 +--------- .github/workflows/scheduler.yaml | 91 +++++++++++++++++++++++++++ .github/workflows/weekly-tests.yaml | 30 +-------- 4 files changed, 94 insertions(+), 73 deletions(-) create mode 100644 .github/workflows/scheduler.yaml diff --git a/.github/workflows/compiler-tests.yaml b/.github/workflows/compiler-tests.yaml index 9db1af6417..32c97ff8c8 100644 --- a/.github/workflows/compiler-tests.yaml +++ b/.github/workflows/compiler-tests.yaml @@ -4,10 +4,7 @@ name: Compiler Tests on: - # Runs every Friday from 7AM UTC - schedule: - - cron: 00 7 * * 5 - # Allows us to manually start workflow for testing + # This is triggered weekly via the 'scheduler.yaml' workflow. workflow_dispatch: jobs: @@ -25,10 +22,6 @@ jobs: container: ghcr.io/gem5/${{ matrix.image }}:latest steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: Compile build/ALL/gem5${{ matrix.opts }} with ${{ matrix.image }} run: /usr/bin/env python3 /usr/bin/scons --ignore-style build/ALL/gem5${{ matrix.opts }} -j$(nproc) timeout-minutes: 600 # 10 hours @@ -47,10 +40,6 @@ jobs: container: ghcr.io/gem5/${{ matrix.image }}:latest steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: Compile build/${{ matrix.gem5-compilation }}/gem5${{ matrix.opts }} with ${{ matrix.image }} run: /usr/bin/env python3 /usr/bin/scons --ignore-style build/${{ matrix.gem5-compilation }}/gem5${{ matrix.opts }} -j$(nproc) timeout-minutes: 600 # 10 hours diff --git a/.github/workflows/daily-tests.yaml b/.github/workflows/daily-tests.yaml index a45c39a183..75ede96488 100644 --- a/.github/workflows/daily-tests.yaml +++ b/.github/workflows/daily-tests.yaml @@ -4,10 +4,7 @@ name: Daily Tests on: - # Runs every day from 7AM UTC - schedule: - - cron: 0 7 * * * - # Allows us to manually start workflow for testing + # This is triggered weekly via the 'scheduler.yaml' workflow. workflow_dispatch: jobs: @@ -49,10 +46,6 @@ jobs: container: ghcr.io/gem5/ubuntu-24.04_all-dependencies:latest steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: defconfig gem5 if: ${{ matrix.setconfig-option != '' }} run: scons defconfig build/${{ matrix.image }} build_opts/${{ matrix.isa-option }} @@ -96,10 +89,6 @@ jobs: timeout-minutes: 60 steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: ALL/unittests.${{ matrix.type }} UnitTests run: scons build/ALL/unittests.${{ matrix.type }} -j $(nproc) @@ -118,10 +107,6 @@ jobs: - name: Clean runner run: rm -rf ./* || true rm -rf ./.??* || true rm -rf ~/.cache || true - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop # download all artifacts for each test. Thoguh this is inelegant, # it's simpler than figuring otu which long tests requires which # binary. @@ -163,10 +148,6 @@ jobs: - name: Clean runner run: rm -rf ./* || true rm -rf ./.??* || true rm -rf ~/.cache || true - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - uses: actions/download-artifact@v4.0.0 with: name: ${{needs.name-artifacts.outputs.build-name}}ALL @@ -195,10 +176,6 @@ jobs: steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: Build RISCV/libgem5_opt.so with SST run: scons build/RISCV/libgem5_opt.so --without-tcmalloc --duplicate-sources --ignore-style -j $(nproc) - name: Makefile ext/sst @@ -220,10 +197,6 @@ jobs: steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: Build ARM/gem5.opt run: scons build/ARM/gem5.opt --ignore-style --duplicate-sources -j$(nproc) - name: disable systemc @@ -246,10 +219,6 @@ jobs: steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: Compile build/VEGA_X86/gem5.opt run: scons build/VEGA_X86/gem5.opt -j $(nproc) - name: Get Square test-prog from gem5-resources diff --git a/.github/workflows/scheduler.yaml b/.github/workflows/scheduler.yaml new file mode 100644 index 0000000000..64a2f3d02f --- /dev/null +++ b/.github/workflows/scheduler.yaml @@ -0,0 +1,91 @@ +--- +name: Workflow Scheduler + +# GitHub scheduled workflows run on the default branch ('stable' in the case of +# gem5). this means for changes in a workflow to take effect, the default +# branch must be updated. This is not ideal as it requires regular commits into +# the stable branch. Ideally we just want to update the workflow on develop and +# have it run on the develop branch. +# +# This workflow is designed to run on the stable branch and will trigger other +# workflows on the develop branch. +# +# To do so we simply schedule this workflow to run every hour and use some +# simple bash logic to determine if the current time is when we want to run the +# other workflows. + +on: + schedule: + # Runs every hour, 30 minutes past the hour. + - cron: 30 * * * * + +env: + # This is the token used to authenticate with GitHub. + # It is required to run the `gh` CLI. + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + schedule-workflows: + runs-on: ubuntu-latest + steps: + # This step is necessary to allow the `gh` CLI to be used in the + # following steps. The `gh` CLI is used to trigger the workflows. + # and needs to be used inside a the same repository where the + # workflows are defined. + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Record day and time + id: timedate-recorder + run: | + # `date +H` returns the current hour as a number from + # `00` to `23`. + echo "HOUR=$(date +%H)" >> $GITHUB_OUTPUT + + # `date +%u` returns the day of the week as a number from + # `1` to `7`. + # `1` is Monday and `7` is Sunday. + echo "DAY=$(date +%u)" >> $GITHUB_OUTPUT + + - name: Daily Tests + env: + HOUR: ${{ steps.timedate-recorder.outputs.HOUR }} + run: | + # If current time is 7pm then run the workflow. + if [[ $HOUR == '19' ]] + then + gh workflow run daily-tests.yaml --ref develop >/dev/null + echo "Daily test scheduled to run on develop branch." + else + echo "Daily tests not scheduled." + fi + + - name: Weekly Tests + env: + DAY: ${{ steps.timedate-recorder.outputs.DAY }} + HOUR: ${{ steps.timedate-recorder.outputs.HOUR }} + run: | + # If the current day is Friday and the time is 7pm then run + # the workflow. + if [[ $DAY == '5' ]] && [[ $HOUR == '19' ]] + then + gh workflow run weekly-tests.yaml --ref develop >/dev/null + echo "Weekly test scheduled to run on develop branch." + else + echo "Weekly tests not scheduled." + fi + + - name: Compiler Tests + env: + DAY: ${{ steps.timedate-recorder.outputs.DAY }} + HOUR: ${{ steps.timedate-recorder.outputs.HOUR }} + run: | + # If the current day is Tuesday and the time is 9pm then run + # the workflow. + if [[ $DAY == '2' ]] && [[ $HOUR == '21' ]] + then + gh workflow run compiler-tests.yaml --ref develop >/dev/null + echo "Compiler tests scheduled to run on the develop branch." + else + echo "Compiler tests not scheduled." + fi diff --git a/.github/workflows/weekly-tests.yaml b/.github/workflows/weekly-tests.yaml index 46a3b564be..1d4161731a 100644 --- a/.github/workflows/weekly-tests.yaml +++ b/.github/workflows/weekly-tests.yaml @@ -4,10 +4,7 @@ name: Weekly Tests on: - # Runs every Sunday from 7AM UTC - schedule: - - cron: 00 7 * * 6 - # Allows us to manually start workflow for testing + # This is triggered weekly via the 'scheduler.yaml' workflow. workflow_dispatch: jobs: @@ -16,10 +13,6 @@ jobs: container: ghcr.io/gem5/gcn-gpu:latest steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: Build gem5 run: scons build/VEGA_X86/gem5.opt -j $(nproc) --ignore-style - uses: actions/upload-artifact@v4 @@ -36,10 +29,6 @@ jobs: timeout-minutes: 480 # 8 hours steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - name: Download build/VEGA_X86/gem5.opt uses: actions/download-artifact@v4 @@ -68,10 +57,6 @@ jobs: timeout-minutes: 120 # 2 hours steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - uses: actions/download-artifact@v4 with: name: weekly-test-${{ github.run_number }}-attempt-${{ github.run_attempt }}-gem5-build-vega @@ -97,10 +82,6 @@ jobs: build-name: ${{ steps.artifact-name.outputs.name }} steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - id: artifact-name run: echo "name=$(date +"%Y-%m-%d_%H.%M.%S")-ALL" >> $GITHUB_OUTPUT - name: Build gem5 @@ -127,10 +108,6 @@ jobs: - name: Clean runner run: rm -rf ./* || true rm -rf ./.??* || true rm -rf ~/.cache || true - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - uses: actions/download-artifact@v4 with: name: ${{needs.build-gem5.outputs.build-name}} @@ -156,11 +133,6 @@ jobs: timeout-minutes: 4320 # 3 days steps: - uses: actions/checkout@v4 - with: - # Scheduled workflows run on the default branch by default. We - # therefore need to explicitly checkout the develop branch. - ref: develop - - name: Checkout DRAMSys working-directory: ${{ github.workspace }}/ext/dramsys run: git clone https://github.com/tukl-msd/DRAMSys --branch v5.0 --depth 1 DRAMSys