Improvements. #383
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Pipeline | |
on: | |
push: | |
workflow_dispatch: | |
schedule: | |
# Every Friday at 22:00 - rerun pipeline to check for dependency-based issues | |
- cron: '0 22 * * 5' | |
jobs: | |
UnitTestingParams: | |
uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev | |
with: | |
name: pyEDAA.CLITool | |
CompileUbuntu: | |
name: Compile GHDL on Ubuntu 2024.04 (LTS) | |
runs-on: "ubuntu-24.04" | |
strategy: | |
fail-fast: false | |
matrix: | |
backend: [mcode, llvm] | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: ⏬ Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ghdl/ghdl | |
- name: 🔧 Install dependencies | |
run: | | |
[ '${{ matrix.backend }}' == 'llvm' ] && LLVM_ARGS='llvm clang' || unset LLVM_ARGS | |
sudo apt-get update | |
sudo apt-get install -y --no-install-recommends gcc g++ gnat $LLVM_ARGS | |
- name: Prepare build environemnt | |
run: | | |
mkdir -p build/${{ matrix.backend }} | |
./configure --help | |
- name: ⚙ Configure | |
run: | | |
cd build/${{ matrix.backend }} | |
[ '${{ matrix.backend }}' == 'llvm' ] && LLVM_ARGS='--with-llvm-config' || unset LLVM_ARGS | |
../../configure --prefix=/opt/ghdl-${{ matrix.backend }} $LLVM_ARGS | |
- name: 🔨 Make | |
run: | | |
cd build/${{ matrix.backend }} | |
make | |
- name: 📋 Install | |
run: | | |
cd build/${{ matrix.backend }} | |
sudo make install | |
- name: 📤 Upload 'GHDL' artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ghdl-ubuntu-24.04-x86_64-${{ matrix.backend }} | |
path: /opt/ghdl-${{ matrix.backend }}/ | |
if-no-files-found: error | |
retention-days: 1 | |
CompileMacOS: | |
name: Compile GHDL on macOS 14.0 (aarch64) | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
backend: [mcode, llvm] | |
env: | |
GNAT_ARCH: "aarch64" | |
GNAT_VERSION: "14.1.0-3" | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: ⏬ Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ghdl/ghdl | |
- name: Install dependencies | |
run: | | |
brew install llvm | |
echo "LLVM_BINARY_PATH=$(brew --prefix llvm)/bin" >> $GITHUB_ENV | |
- name: Install GNAT | |
run: | | |
GNAT_NAME="gnat-${{ env.GNAT_ARCH }}-darwin-${{ env.GNAT_VERSION }}" | |
GNAT_URL="https://github.com/alire-project/GNAT-FSF-builds/releases/download/gnat-${{ env.GNAT_VERSION }}/${GNAT_NAME}.tar.gz" | |
echo "Downloading GNAT ${{ env.GNAT_VERSION }} (${{ env.GNAT_ARCH }}) from '$GNAT_URL'" | |
wget -q --show-progress --progress=bar:force:noscroll -O GNAT.tar.gz "$GNAT_URL" | |
test $? -ne 0 && echo -e "ERROR: Downloading '$GNAT_URL'" && exit 1 | |
ls -lAh | |
tar -zxf GNAT.tar.gz && rm GNAT.tar.gz | |
test $? -ne 0 && echo -e "ERROR: Extracting 'GNAT.tar.gz'" && exit 1 | |
mv ${GNAT_NAME} gnat | |
echo "ls gnat" | |
ls -lAh gnat | |
echo "ls gnat/bin" | |
ls -lAh gnat/bin | |
./gnat/bin/gnatls -v | |
echo "PWD: $(pwd)" | |
ls -lAh $(pwd)/gnat | |
ls -lAh $(pwd)/gnat/bin | |
echo "GNAT_BINARY_PATH=$(pwd)/gnat/bin" >> $GITHUB_ENV | |
- name: Prepare build environemnt | |
run: | | |
mkdir -p build/${{ matrix.backend }} | |
echo $PATH | |
echo "PATH=$GNAT_BINARY_PATH:$LLVM_BINARY_PATH:$PATH" >> $GITHUB_ENV | |
- name: Check build environemnt | |
run: | | |
echo $PATH | |
ls -lAh $(pwd) | |
ls -lAh /Users/runner/work/pyEDAA.CLITool/pyEDAA.CLITool/gnat/bin | |
echo "which gnat: $(which gnat) ($($(which gnat) --version))" | |
echo "which gnatmake: $(which gnatmake) ($($(which gnatmake) --version))" | |
echo "which llvm-config: $(which llvm-config) ($($(which llvm-config) --version))" | |
- name: ⚙ Configure | |
run: | | |
cd build/${{ matrix.backend }} | |
[ '${{ matrix.backend }}' == 'llvm' ] && LLVM_ARGS='--with-llvm-config' || unset LLVM_ARGS | |
../../configure --prefix=/opt/ghdl-${{ matrix.backend }} $LLVM_ARGS | |
- name: 🔨 Make | |
run: | | |
cd build/${{ matrix.backend }} | |
make | |
- name: 📋 Install | |
run: | | |
cd build/${{ matrix.backend }} | |
sudo make install | |
- name: 📤 Upload 'GHDL' artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ghdl-darwin-14.0-aarch64-${{ matrix.backend }} | |
path: /opt/ghdl-${{ matrix.backend }}/ | |
if-no-files-found: error | |
retention-days: 1 | |
CompileWindows: | |
name: Compile GHDL on Windows Server | |
runs-on: windows-latest | |
env: | |
msys2_packages: "make" | |
common_packages: "gcc:p gcc-ada:p diffutils:p" | |
mcode_packages: "" | |
llvm_packages: "llvm:p clang:p" | |
strategy: | |
fail-fast: false | |
matrix: | |
runtime: [mingw64, ucrt64] | |
backend: [mcode, llvm] | |
defaults: | |
run: | |
shell: "msys2 {0}" | |
steps: | |
- name: ⏬ Checkout repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ghdl/ghdl | |
- name: '🟦 Setup MSYS2 for ${{ matrix.runtime }}' | |
uses: msys2/setup-msys2@v2 | |
with: | |
msystem: ${{ matrix.runtime }} | |
update: true | |
install: ${{ env.msys2_packages }} | |
pacboy: "${{ env.common_packages }} ${{ env.mcode_packages }} ${{ env.llvm_packages }}" | |
- name: Check build environemnt | |
run: | | |
echo "which gnat: $(which gnat) ($($(which gnat) --version))" | |
echo "which gnatmake: $(which gnatmake) ($($(which gnatmake) --version))" | |
echo "which llvm-config: $(which llvm-config) ($($(which llvm-config) --version))" | |
- name: Prepare build environemnt | |
run: mkdir -p build/${{ matrix.backend }} | |
- name: ⚙ Configure | |
run: | | |
cd build/${{ matrix.backend }} | |
[ '${{ matrix.backend }}' == 'llvm' ] && LLVM_ARGS='--with-llvm-config' || unset LLVM_ARGS | |
../../configure --prefix=/opt/ghdl-${{ matrix.runtime }}-${{ matrix.backend }} $LLVM_ARGS | |
- name: 🔨 Make | |
run: | | |
cd build/${{ matrix.backend }} | |
make | |
- name: 📋 Install | |
run: | | |
cd build/${{ matrix.backend }} | |
make install | |
- name: Debug | |
run: | | |
ls -lAh /opt | |
ls -lAh /opt/ghdl-${{ matrix.runtime }}-${{ matrix.backend }} | |
ls -lAh /opt/ghdl-${{ matrix.runtime }}-${{ matrix.backend }}/bin | |
- name: 📤 Upload 'GHDL' artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ghdl-windows-${{ matrix.runtime }}-${{ matrix.backend }} | |
path: /opt/ghdl-${{ matrix.runtime }}-${{ matrix.backend }}/ | |
if-no-files-found: error | |
retention-days: 1 | |
UnitTesting: | |
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@dev | |
needs: | |
- UnitTestingParams | |
# - CompileUbuntu | |
- CompileMacOS | |
- CompileWindows | |
with: | |
jobs: ${{ needs.UnitTestingParams.outputs.python_jobs }} | |
apt: ghdl-mcode | |
brew: --cask ghdl | |
pacboy: ghdl | |
ubuntu_before_script: | | |
which ghdl | |
ghdl version | |
echo "GHDL_PREFIX=/usr/lib/x86_64-linux-gnu/ >> $GITHUB_ENV" | |
echo "GHDL_PREFIX=/usr/lib/x86_64-linux-gnu/" >> $GITHUB_ENV | |
macos_arm_before_script: | | |
which ghdl | |
ghdl version | |
echo $(brew --prefix llvm@15) | |
export DYLD_LIBRARY_PATH=$(brew --prefix llvm@15)/lib | |
echo -$DYLD_LIBRARY_PATH- | |
echo "DYLD_LIBRARY_PATH=$(brew --prefix llvm@15)/lib" >> $GITHUB_ENV | |
echo "GHDL_PREFIX=$(realpath $(dirname $(which ghdl))/../lib/ghdl) >> $GITHUB_ENV" | |
echo "GHDL_PREFIX=$(realpath $(dirname $(which ghdl))/../lib/ghdl)" >> $GITHUB_ENV | |
ls -lAh "$(realpath $(dirname $(which ghdl))/../lib)" | |
echo "----" | |
ls $(brew --prefix llvm@15)/lib | |
mingw64_before_script: | | |
which ghdl | |
ghdl version | |
echo "GHDL_PREFIX=$(realpath $(dirname $(which ghdl))/../lib/ghdl) >> $GITHUB_ENV" | |
echo "GHDL_PREFIX=$(realpath $(dirname $(which ghdl))/../lib/ghdl)" >> $GITHUB_ENV | |
# ls -lAh "$(realpath $(dirname $(which ghdl))/../lib)" | |
ucrt64_before_script: | | |
which ghdl | |
ghdl version | |
echo "GHDL_PREFIX=$(realpath $(dirname $(which ghdl))/../lib/ghdl) >> $GITHUB_ENV" | |
echo "GHDL_PREFIX=$(realpath $(dirname $(which ghdl))/../lib/ghdl)" >> $GITHUB_ENV | |
# ls -lAh "$(realpath $(dirname $(which ghdl))/../lib)" | |
# ubuntu_before_script: sudo install -m 755 tests/mock/ghdl /usr/local/bin | |
requirements: "-r tests/unit/requirements.txt" | |
unittest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} | |
coverage_sqlite_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} | |
StaticTypeCheck: | |
uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@dev | |
needs: | |
- UnitTestingParams | |
with: | |
python_version: ${{ needs.UnitTestingParams.outputs.python_version }} | |
commands: | | |
touch pyEDAA/__init__.py | |
mypy --html-report htmlmypy -p pyEDAA.CLITool | |
html_report: 'htmlmypy' | |
html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} | |
DocCoverage: | |
uses: pyTooling/Actions/.github/workflows/CheckDocumentation.yml@dev | |
needs: | |
- UnitTestingParams | |
with: | |
python_version: ${{ needs.UnitTestingParams.outputs.python_version }} | |
directory: pyEDAA/CLITool | |
fail_under: 75 | |
Package: | |
uses: pyTooling/Actions/.github/workflows/Package.yml@dev | |
needs: | |
- UnitTestingParams | |
- UnitTesting | |
with: | |
python_version: ${{ needs.UnitTestingParams.outputs.python_version }} | |
artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} | |
PublishCoverageResults: | |
uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@dev | |
needs: | |
- UnitTestingParams | |
- UnitTesting | |
with: | |
coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} | |
coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} | |
secrets: | |
codacy_token: ${{ secrets.CODACY_PROJECT_TOKEN }} | |
PublishTestResults: | |
uses: pyTooling/Actions/.github/workflows/PublishTestResults.yml@dev | |
needs: | |
- UnitTestingParams | |
- UnitTesting | |
with: | |
additional_merge_args: '"--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit" --render=tree' | |
merged_junit_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} | |
IntermediateCleanUp: | |
uses: pyTooling/Actions/.github/workflows/IntermediateCleanUp.yml@dev | |
needs: | |
- UnitTestingParams | |
- PublishCoverageResults | |
- PublishTestResults | |
- HTMLDocumentation | |
with: | |
sqlite_coverage_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}- | |
xml_unittest_artifacts_prefix: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}- | |
# VerifyDocs: | |
# uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@dev | |
# needs: | |
# - UnitTestingParams | |
# with: | |
# python_version: ${{ needs.UnitTestingParams.outputs.python_version }} | |
HTMLDocumentation: | |
uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@dev | |
needs: | |
- UnitTestingParams | |
- PublishTestResults | |
- PublishCoverageResults | |
# - VerifyDocs | |
with: | |
python_version: ${{ needs.UnitTestingParams.outputs.python_version }} | |
unittest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} | |
coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} | |
html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} | |
latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} | |
PDFDocumentation: | |
uses: pyTooling/Actions/.github/workflows/LaTeXDocumentation.yml@dev | |
needs: | |
- UnitTestingParams | |
- HTMLDocumentation | |
with: | |
document: pyEDAA.CLITool | |
latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} | |
pdf_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }} | |
PublishToGitHubPages: | |
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@dev | |
needs: | |
- UnitTestingParams | |
- HTMLDocumentation | |
# - PDFDocumentation | |
- PublishCoverageResults | |
- StaticTypeCheck | |
with: | |
doc: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} | |
# coverage: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} | |
typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} | |
ReleasePage: | |
uses: pyTooling/Actions/.github/workflows/Release.yml@dev | |
if: startsWith(github.ref, 'refs/tags') | |
needs: | |
- PublishToGitHubPages | |
PublishOnPyPI: | |
uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@dev | |
if: startsWith(github.ref, 'refs/tags') | |
needs: | |
- UnitTestingParams | |
- ReleasePage | |
with: | |
python_version: ${{ needs.UnitTestingParams.outputs.python_version }} | |
requirements: -r dist/requirements.txt | |
artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} | |
secrets: | |
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} | |
ArtifactCleanUp: | |
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@dev | |
needs: | |
- UnitTestingParams | |
- UnitTesting | |
- StaticTypeCheck | |
- HTMLDocumentation | |
# - PDFDocumentation | |
- PublishTestResults | |
- PublishCoverageResults | |
- PublishToGitHubPages | |
with: | |
package: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} | |
remaining: | | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}-* | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_html }}-* | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }}-* | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }}-* | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }}-* | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }}-* | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_html }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_sqlite }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_xml }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} | |
${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }} | |
# ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }} |