-
Notifications
You must be signed in to change notification settings - Fork 609
137 lines (128 loc) · 4.19 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
name: Continuous Integration
on:
workflow_dispatch:
pull_request:
branches-ignore:
- ci/ci-circt-nightly
push:
tags:
- '*'
branches:
- main
- '*.x'
env:
circt: "default"
jobs:
set-circt-versions:
name: Set the CIRCT version from the env
runs-on: ubuntu-20.04
steps:
- name: Set CIRCT Version
id: set-circt-version
run: |
echo versions='["${{ env.circt }}"]' >> $GITHUB_OUTPUT
outputs:
circt-versions: ${{ steps.set-circt-version.outputs.versions }}
ci:
name: ci
needs: [set-circt-versions]
strategy:
matrix:
system: ["ubuntu-20.04"]
jvm: [8]
scala: ["2.13.12"]
espresso: ["2.4"]
circt: ${{ fromJSON(needs.set-circt-versions.outputs.circt-versions) }}
uses: ./.github/workflows/test.yml
with:
system: ${{ matrix.system }}
jvm: ${{ matrix.jvm }}
scala: ${{ matrix.scala }}
espresso: ${{ matrix.espresso }}
circt: ${{ matrix.circt }}
# Sentinel job to simplify how we specify which checks need to pass in branch
# protection and in Mergify. This job checks that all matrix jobs were
# successful.
check-tests:
name: "check tests"
needs: ci
runs-on: ubuntu-20.04
outputs:
success: ${{ steps.setoutput.outputs.success }}
steps:
- id: setoutput
run: echo "success=true" >> $GITHUB_OUTPUT
# Related to check-tests above, this job _always_ runs (even if tests fail
# and thus check-steps is skipped). This two sentinel job approach avoids an
# issue where failing tests causes a single sentinel job to be skipped which
# counts as passing for purposes of branch protection.
#
# See: https://brunoscheufler.com/blog/2022-04-09-the-required-github-status-check-that-wasnt
all_tests_passed:
name: "all tests passed"
runs-on: ubuntu-20.04
if: always() # Always run so that we never skip this check
needs: check-tests
# Pass only if check-tests set its output value
steps:
- run: |
PASSED=${{ needs.check-tests.outputs.success }}
if [[ $PASSED == "true" ]]; then
echo "### All tests passed! :rocket:" >> $GITHUB_STEP_SUMMARY
exit 0
else
echo "### One or more tests FAILED! :bangbang:" >> $GITHUB_STEP_SUMMARY
exit 1
fi
# sbt ci-release publishes all cross versions so this job needs to be
# separate from a Scala versions build matrix to avoid duplicate publishing
publish:
needs: [all_tests_passed]
runs-on: ubuntu-20.04
if: github.event_name == 'push'
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install CIRCT
uses: ./.github/workflows/install-circt
with:
version: ${{ env.circt }}
github-token: ${{ github.token }}
- name: Setup Scala
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '8'
cache: 'sbt'
- name: Setup GPG (for Publish)
uses: olafurpg/setup-gpg@v3
- name: Publish
run: sbt ci-release
env:
CI_SNAPSHOT_RELEASE: "+unipublish/publish"
CI_SONATYPE_RELEASE: "+unipublish/publishSigned"
PGP_PASSPHRASE: ${{ secrets.PGP_PASSPHRASE }}
PGP_SECRET: ${{ secrets.PGP_SECRET }}
SONATYPE_PASSWORD: ${{ secrets.CHIPSALLIANCE_SONATYPE_PASSWORD }}
SONATYPE_USERNAME: ${{ secrets.CHIPSALLIANCE_SONATYPE_USERNAME }}
deploy_website:
name: Deploy Website
runs-on: ubuntu-latest
needs: [all_tests_passed]
# Only Deploy website on pushes to main, may change to a stable branch
if: (github.event_name == 'push') && (github.ref_name == 'main')
steps:
- name: Download built website
uses: actions/download-artifact@v3
with:
name: website
- name: Untar built website
run: tar zxf website.tar.gz
- name: Deploy Website to GitHub Pages (From Main Branch)
uses: JamesIves/github-pages-deploy-action@3.7.1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH: gh-pages
FOLDER: website/docs/target/site