88 - cron : ' 0 15 * * *'
99
1010jobs :
11+ Variables :
12+ name : Compute pipeline variables
13+ runs-on : ubuntu-24.04
14+ outputs :
15+ branch : ${{ steps.Variables.outputs.branch }}
16+ tag : ${{ steps.Variables.outputs.tag }}
17+ steps :
18+ - name : Compute variables
19+ id : Variables
20+ run : |
21+ ref="${{ github.ref }}"
22+
23+ branch=""
24+ tag="2025.xx"
25+ if [[ "${{ startsWith(github.ref, 'refs/heads/') }}" == "true" ]]; then
26+ branch="${ref:11}"
27+ elif [[ "${{ startsWith(github.ref, 'refs/tags/') }}" == "true" ]]; then
28+ tag="${ref:10}"
29+ else
30+ printf "::error title=%s::%s\n" "Variables" "Unsupported Git reference format: '${ref}'."
31+ exit 1
32+ fi
33+
34+ tee "${GITHUB_OUTPUT}" <<EOF
35+ branch=${branch}
36+ tag=${tag}
37+ EOF
38+
1139 GHDL :
1240 name : ${{ matrix.os.icon }}${{ matrix.os.name }} - GHDL ${{ matrix.backend }}
1341 runs-on : ${{ matrix.os.image }}
@@ -97,63 +125,64 @@ jobs:
97125 if-no-files-found : error
98126
99127 NVC :
100- name : 🪟Windows - NVC
101- runs-on : windows-2022
128+ name : ${{ matrix.icon }}${{ matrix.name }} - NVC
129+ runs-on : ${{ matrix.image }}
130+ strategy :
131+ fail-fast : false
132+ matrix :
133+ include :
134+ - {icon: "🐧", name: "Ubuntu", image: "ubuntu-24.04", shell: "bash"}
135+ # - {icon: "🪟", name: "Windows", image: "windows-2022", shell: "powershell"} # No TCL environment available. The embedded TCL of NVC doesn't contain tcllib.
136+ - {icon: "🪟🟨", name: "Windows", image: "windows-2022", shell: "msys2 {0}"}
102137
103138 defaults :
104139 run :
105- shell : " msys2 {0} "
140+ shell : ${{ matrix.shell }}
106141
107142 steps :
108143 - name : ⏬ Checkout repository
109144 uses : actions/checkout@v4
110145 with :
111146 submodules : recursive
112147
113- - name : 🟨 Setup MSYS2 for UCRT64
148+ - name : ${{ matrix.icon }} Setup MSYS2 for UCRT64
149+ if : matrix.name == 'Windows' && startsWith(matrix.shell, 'msys2')
114150 uses : msys2/setup-msys2@v2
115151 with :
116152 msystem : ucrt64
117153 update : true
118- install : git
154+ install : git tree
119155 pacboy : tcl:p tcllib:p
120156
121- - name : 🐧🛠️ Install NVC
157+ - name : 🐧🛠️ Install tcl and tcllib
158+ if : matrix.name == 'Ubuntu'
122159 run : |
123- # See https://github.com/nickg/nvc/releases
124- # and https://github.com/nickg/nvc/issues/1131
125- NVC_VERSION="1.15.0"
126- NVC_DATE="20250111"
127- NVC_HASH="ec21477e"
128-
129- ANSI_LIGHT_RED=$'\x1b[91m'
130- ANSI_LIGHT_GREEN=$'\x1b[92m'
131- ANSI_LIGHT_BLUE="\e[94m"
132- ANSI_NOCOLOR=$'\x1b[0m'
133-
134- DOWNLOAD_URL="https://github.com/nickg/nvc/releases/download/r${NVC_VERSION}/mingw-w64-ucrt-x86_64-nvc-${NVC_VERSION}.git${NVC_DATE}.${NVC_HASH}-1-any.pkg.tar.zst"
135- printf "::group::${ANSI_LIGHT_BLUE}%s${ANSI_NOCOLOR}\n" "Downloading asset from '${DOWNLOAD_URL}' ..."
136- curl -L "${DOWNLOAD_URL}" -o nvc.pkg.tar.zst
137- printf "::endgroup::\n"
138-
139- printf "::group::${ANSI_LIGHT_BLUE}%s${ANSI_NOCOLOR}\n" "Installing 'nvc.pkg.tar.zst' file ..."
140- pacman -U --noconfirm nvc.pkg.tar.zst
141- printf "::endgroup::\n"
142-
143- printf "Deleting '%s' ... " "nvc.pkg.tar.zst"
144- rm "nvc.pkg.tar.zst"
145- if [[ $? -eq 0 ]]; then
146- printf "%s\n" "${ANSI_LIGHT_GREEN}[OK]${ANSI_NOCOLOR}"
147- else
148- printf "%s\n" "${ANSI_LIGHT_RED}[FAILED]${ANSI_NOCOLOR}"
149- printf "::warning title=%s::%s\n" "setup-nvc" "Failed to remove 'nvc.pkg.tar.zst'."
150- fi
160+ sudo apt-get update
161+ sudo apt-get install -y --no-install-recommends tcl tcllib
151162
152- - name : 🚧 Run tests'
163+ - name : Install NVC
164+ uses : nickg/setup-nvc-ci@v1
165+ with :
166+ version : latest
167+
168+ - name : 🚧 Run tests on Ubuntu
169+ if : matrix.name == 'Ubuntu'
170+ run : |
171+ mkdir temp
172+ cd temp
173+
174+ tclsh ../.github/test.tcl StartNVC.tcl
175+
176+ - name : 🚧 Run tests on Windows + MSYS2/UCRT64
177+ if : matrix.name == 'Windows' && startsWith(matrix.shell, 'msys2')
153178 run : |
154179 mkdir temp
155180 cd temp
156181
182+ tree "/c/Program Files/NVC"
183+
184+ export PATH="/c/Program\ Files/NVC/bin:$PATH"
185+
157186 tclsh ../.github/test.tcl StartNVC.tcl
158187
159188 - name : ' 📤 Upload artifact: logs'
@@ -190,36 +219,15 @@ jobs:
190219 if-no-files-found : error
191220
192221 PublishTestResults :
193- name : 📊 Publish Unit Tests Results
194- runs-on : ubuntu-24.04
222+ uses : pyTooling/Actions/.github/workflows/PublishTestResults.yml@r4
195223 needs :
196224 - GHDL
197225 - NVC
198-
199- if : always()
200-
201- steps :
202- - name : ⏬ Checkout repository
203- uses : actions/checkout@v4
204-
205- - name : ' 📥 Download artifact: package'
206- uses : actions/download-artifact@v4
207- with :
208- path : artifacts
209- pattern : xml-*
210-
211- - name : List all artifacts
212- run : |
213- tree artifacts
214-
215- - name : 📊 Publish Unit Test Results
216- uses : dorny/test-reporter@v1
217- with :
218- name : OSVVM VC Regression Results
219- path : artifacts/**/*.xml
220- reporter : java-junit
221- list-suites : all
222- list-tests : failed
226+ with :
227+ unittest_artifacts_pattern : ' xml-*'
228+ merged_junit_artifact : ' xml'
229+ additional_merge_args : ' -d "--render=tree" "--name=OSVVM Regression" "--pytest=rewrite-dunder-init;reduce-depth:pytest.testsuite.pyunit;split:pytest"'
230+ publish : ${{ github.event_name != 'pull_request' }}
223231
224232 Package :
225233 name : Package OSVVMLibraries incl. all Git submodules as artifact
@@ -230,6 +238,7 @@ jobs:
230238 uses : actions/checkout@v4
231239 with :
232240 path : OsvvmLibraries
241+ submodules : recursive
233242
234243 - name : List content of 'OsvvmLibraries' ...
235244 run : |
@@ -241,4 +250,60 @@ jobs:
241250 name : osvvm
242251 path : |
243252 OsvvmLibraries/*
253+ include-hidden-files : true
244254 if-no-files-found : error
255+
256+ Release :
257+ uses : pyTooling/Actions/.github/workflows/NightlyRelease.yml@dev
258+ needs :
259+ - Variables
260+ - Package
261+ # if: github.ref == 'refs/tags/testing'
262+ # if: startsWith(github.ref, 'refs/tags/v')
263+ secrets : inherit
264+ permissions :
265+ contents : write
266+ actions : write
267+ attestations : write
268+ with :
269+ prerelease : true
270+ replacements : |
271+ osvvm=${{ needs.Variables.outputs.tag }}
272+ nightly_name : testing
273+ nightly_description : |
274+ This release contains all important artifacts created by OSVVM's CI pipeline.
275+
276+ # OSVVM %osvvm%
277+
278+ All Git repositories and submodules have been packaged in a single zip file. This file contains the following
279+ OSVVM components.
280+
281+ ## Core Components
282+ * [OSVVM Utility Library](https://github.com/OSVVM/OSVVM)
283+ * [OSVVM Model Independent Transactions](https://github.com/OSVVM/OSVVM-Common)
284+
285+ ## Verification Components
286+ * [AXI4](https://github.com/OSVVM/AXI4)
287+ * [CoSim](https://github.com/OSVVM/CoSim)
288+ * [DpRam](https://github.com/OSVVM/DpRam)
289+ * [Ethernet](https://github.com/OSVVM/Ethernet)
290+ * [UART](https://github.com/OSVVM/UART)
291+
292+ ## Third-Party Verification Components
293+ * [SPI (by Guy Eschemann)](https://github.com/OSVVM/SPI_GuyEschemann)
294+ * [VideoBus (by Louis Adriaens)](https://github.com/OSVVM/VideoBus_LouisAdriaens)
295+
296+ ## Scripting
297+ * [OSVVM Scripts](https://github.com/OSVVM/OSVVM-Scripts)
298+
299+ ## Documentation
300+
301+ * [Documentation](https://github.com/OSVVM/Documentation)
302+
303+ inventory-json : " inventory.json"
304+ inventory-version : ${{ needs.Variables.outputs.tag }}
305+ inventory-categories : " kind"
306+ assets : |
307+ osvvm: !OsvvmLibraries-%osvvm%.zip: osvvm,zip: OsvvmLibraries - %osvvm% - all-in-one (ZIP)
308+ osvvm: $OsvvmLibraries-%osvvm%.tar.gz: osvvm,tgz: OsvvmLibraries - %osvvm% - all-in-one (TAR/GZ)
309+ osvvm: $OsvvmLibraries-%osvvm%.tar.zst: osvvm,tzst: OsvvmLibraries - %osvvm% - all-in-one (TAR/ZST)
0 commit comments