| # This workflow runs after a pull-request has been approved by a reviewer. |
| |
| name: CI Tests |
| |
| on: |
| pull_request: |
| types: [opened, edited, synchronize, ready_for_review] |
| |
| |
| jobs: |
| pre-commit: |
| # runs on github hosted runner |
| runs-on: ubuntu-22.04 |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/setup-python@v3 |
| - uses: pre-commit/action@v3.0.0 |
| |
| # ensures we have a change-id in every commit, needed for gerrit |
| check-for-change-id: |
| # runs on github hosted runner |
| runs-on: ubuntu-latest |
| container: gcr.io/gem5-test/ubuntu-22.04_all-dependencies:latest |
| steps: |
| - uses: actions/github-script@v6 |
| env: |
| token: "Change-Id" |
| pattern: ".*" |
| with: |
| script: | |
| const commits = ${{ toJSON(github.event.commits) }} |
| for (const commit of commits) { |
| const id = "Change-Id: " |
| const message = commit.message; |
| if (!message.includes(id)) { |
| core.setFailed('One or more of the commits in this pull request is missing a Change-ID, which we require for any changes made to gem5. ' + |
| 'To automatically insert one, run the following:\n f=`git rev-parse --git-dir`/hooks/commit-msg ; mkdir -p $(dirname $f) ; ' + |
| 'curl -Lo $f https://gerrit-review.googlesource.com/tools/hooks/commit-msg ; chmod +x $f\n Then amend the commit with git commit --amend --no-edit, and update your pull request.') |
| } |
| } |
| |
| build-gem5: |
| runs-on: [self-hosted, linux, x64, build] |
| container: gcr.io/gem5-test/ubuntu-22.04_all-dependencies:latest |
| needs: [pre-commit, check-for-change-id] # only runs if pre-commit and change-id passes |
| outputs: |
| artifactname: ${{ steps.name.outputs.test }} |
| steps: |
| - uses: actions/checkout@v3 |
| - id: name |
| run: echo "test=$(date +"%Y-%m-%d_%H.%M.%S")-artifact" >> $GITHUB_OUTPUT |
| |
| - name: Build gem5 |
| run: | |
| scons build/ALL/gem5.opt -j $(nproc) |
| - uses: actions/upload-artifact@v3 |
| with: |
| name: ${{ steps.name.outputs.test }} |
| path: build/ALL/gem5.opt |
| - run: echo "This job's status is ${{ job.status }}." |
| |
| unittests-all-opt: |
| runs-on: [self-hosted, linux, x64, run] |
| container: gcr.io/gem5-test/ubuntu-22.04_all-dependencies:latest |
| needs: [pre-commit, check-for-change-id] # only runs if pre-commit and change-id passes |
| timeout-minutes: 60 |
| steps: |
| - uses: actions/checkout@v3 |
| - name: CI Unittests |
| working-directory: ${{ github.workspace }} |
| run: scons build/ALL/unittests.opt -j $(nproc) |
| - run: echo "This job's status is ${{ job.status }}." |
| |
| testlib-quick: |
| runs-on: [self-hosted, linux, x64, run] |
| container: gcr.io/gem5-test/ubuntu-22.04_all-dependencies:latest |
| needs: [pre-commit, check-for-change-id, build-gem5] |
| timeout-minutes: 360 # 6 hours |
| steps: |
| - uses: actions/checkout@v3 |
| - uses: actions/download-artifact@v3 |
| with: |
| name: ${{needs.build-gem5.outputs.artifactname}} |
| path: build/ALL |
| - run: chmod u+x build/ALL/gem5.opt |
| - name: The TestLib CI Tests |
| working-directory: ${{ github.workspace }}/tests |
| run: ./main.py run --skip-build -vv |
| - name: create zip of results |
| if: success() || failure() |
| run: | |
| apt-get -y install zip |
| zip -r output.zip tests/testing-results |
| - name: upload zip |
| if: success() || failure() |
| uses: actions/upload-artifact@v3 |
| env: |
| MY_STEP_VAR: ${{github.job}}_COMMIT.${{github.sha}}_RUN.${{github.run_id}}_ATTEMPT.${{github.run_attempt}} |
| with: |
| name: ${{ env.MY_STEP_VAR }} |
| path: output.zip |
| retention-days: 7 |
| - run: echo "This job's status is ${{ job.status }}." |