Build «feature/2171-add-table-support-in-sweepformula» (MichaelHuth) #2225
This file contains hidden or 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: Build Branch | |
| run-name: Build «${{ github.ref_name }}» (${{ github.actor}}) | |
| on: | |
| push: | |
| branches-ignore: | |
| - main | |
| - release/* | |
| tags-ignore: | |
| - '*' | |
| workflow_call: | |
| inputs: | |
| is_called_workflow: | |
| required: true | |
| default: false | |
| type: boolean | |
| description: | | |
| Should be set to true. This is used to determine of this workflow was called directly or | |
| from another workflow. | |
| do_instrumentation: | |
| required: false | |
| default: false | |
| type: boolean | |
| description: | | |
| Set to true to enable instrumentation of Igor code. The execution will be approx. 30% | |
| slower. | |
| secrets: | |
| GHA_MIES_CERTIFICATE_PIN: | |
| required: true | |
| GHA_MIES_FTP_ARTEFACT_STORAGE_USER: | |
| required: true | |
| GHA_MIES_FTP_ARTEFACT_STORAGE_PWD: | |
| required: true | |
| defaults: | |
| run: | |
| shell: bash | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| BuildInstaller: | |
| name: 🏗 Build installer | |
| runs-on: [ self-hosted, Windows, Certificate ] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 # load all commits | |
| - name: Initial repo config | |
| run: tools/initial-repo-config.sh | |
| - name: Create release package and installer | |
| run: tools/create-installer.sh unelevated | |
| - name: Sign installer | |
| run: tools/sign-installer.sh -p '${{ secrets.GHA_MIES_CERTIFICATE_PIN }}' | |
| - name: upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ always() }} | |
| with: | |
| name: BuildInstaller-assets | |
| path: | | |
| *.zip | |
| tools/installer/MIES-*.exe | |
| if-no-files-found: error | |
| PreCommitLinting: | |
| name: 🔎 Pre-Commit Linting | |
| runs-on: [ self-hosted, Linux, Docker ] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - uses: actions/cache@v4 | |
| with: | |
| path: .cache/pre-commit | |
| key: pre-commit|${{ hashFiles('.pre-commit-config.yaml', 'tools/pre-commit/Dockerfile', 'tools/pre-commit/requirements.txt') }} | |
| - name: Pre commit | |
| run: tools/pre-commit/run.sh | |
| CompilationTest: | |
| name: 👩🏾🔬 Compilation of ${{ matrix.source }} ${{ fromJSON('["","with XOP"]')[matrix.hardware] }} v${{ matrix.version }} | |
| needs: | |
| - BuildInstaller | |
| strategy: | |
| matrix: | |
| source: [ git, installer ] | |
| hardware: [ false, true ] | |
| version: [9, 10] | |
| exclude: | |
| # the git source is always checked with hardware support | |
| - source: git | |
| hardware: false | |
| uses: ./.github/workflows/test-igor-workflow.yml | |
| with: | |
| job_name: 👩🏾🔬 Compilation of ${{ matrix.source }} ${{ fromJSON('["","with XOP"]')[matrix.hardware] }} | |
| overwrite_job_name: ${{ inputs.is_called_workflow || false }} | |
| experiment: Packages/tests/Compilation/CompilationTester.pxp | |
| installer_artifact_name: BuildInstaller-assets | |
| installer_flags: ${{ fromJSON('["-x skipHardwareXOPs",""]')[matrix.hardware] }} -s ${{ matrix.source }} | |
| artifact_name: CompilationTest-${{ matrix.source }}-${{ fromJSON('["no-hardware","hardware"]')[matrix.hardware] }}-v${{ matrix.version }}-assets | |
| timeout_minutes: 60 | |
| major_igorpro_version: ${{ matrix.version }} | |
| CompilationEachCommitTest: | |
| name: 👩🏾🔬 Compilation of each commit | |
| if: ${{ !inputs.is_called_workflow }} | |
| uses: ./.github/workflows/test-igor-rebase-exec-workflow.yml | |
| with: | |
| job_name: 👩🏾🔬 Compilation of each commit | |
| overwrite_job_name: ${{ inputs.is_called_workflow || false }} | |
| experiment: Packages/tests/Compilation/CompilationTester.pxp | |
| installer_flags: "-s git" | |
| artifact_name: Compilation-Each-Commit-assets | |
| timeout_minutes: 180 | |
| Documentation: | |
| name: 👷 Documentation | |
| runs-on: [ self-hosted, Linux, Docker ] | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 # load all commits | |
| - name: Initial repo config | |
| run: tools/initial-repo-config.sh | |
| - name: Build documentation | |
| run: tools/documentation/run.sh | |
| - name: upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| if: ${{ always() }} | |
| with: | |
| name: Documentation-assets | |
| path: | | |
| Packages/doc/*.zip | |
| if-no-files-found: error | |
| TestWithoutHardware: | |
| name: 🧪 Test ${{ matrix.name }} v${{ matrix.version }} | |
| needs: | |
| - BuildInstaller | |
| - PreCommitLinting | |
| - CompilationTest | |
| strategy: | |
| matrix: | |
| version: | |
| - 9 | |
| - 10 | |
| name: | |
| - Basic | |
| - PAPlot | |
| - HistoricData | |
| include: | |
| - experiment: Packages/tests/Basic/Basic.pxp | |
| name: Basic | |
| - experiment: Packages/tests/PAPlot/PAPlot.pxp | |
| name: PAPlot | |
| - experiment: Packages/tests/HistoricData/HistoricData.pxp | |
| name: HistoricData | |
| exclude: | |
| - version: 10 | |
| name: PAPlot | |
| - version: 10 | |
| name: HistoricData | |
| uses: ./.github/workflows/test-igor-workflow.yml | |
| with: | |
| job_name: 🧪 Test ${{ matrix.name }} | |
| overwrite_job_name: ${{ inputs.is_called_workflow || false }} | |
| experiment: ${{ matrix.experiment }} | |
| artifact_name: TestWithoutHardware-${{ matrix.name }}-v${{ matrix.version }}-assets | |
| expensive_checks: "1" | |
| instrument_tests: ${{ fromJson('["0", "1"]')[inputs.do_instrumentation] }} | |
| timeout_minutes: 60 | |
| major_igorpro_version: ${{ matrix.version }} | |
| TestNI: | |
| name: 🧪 Test NI ${{ matrix.name }} | |
| needs: | |
| - BuildInstaller | |
| - CompilationTest | |
| - TestWithoutHardware | |
| strategy: | |
| matrix: | |
| include: | |
| - experiment: Packages/tests/HardwareBasic/HardwareBasic-NI.pxp | |
| name: HardwareBasic | |
| - experiment: Packages/tests/HardwareAnalysisFunctions/HardwareAnalysisFunctions-NI.pxp | |
| name: HardwareAnalysisFunctions | |
| uses: ./.github/workflows/test-igor-workflow.yml | |
| with: | |
| job_name: 🧪 Test NI ${{ matrix.name }} | |
| overwrite_job_name: ${{ inputs.is_called_workflow || false }} | |
| experiment: ${{ matrix.experiment }} | |
| target: "[ 'self-hosted', 'Windows', 'IgorPro', 'NI' ]" | |
| artifact_name: TestNI-${{ matrix.name }}-assets | |
| expensive_checks: "1" | |
| instrument_tests: ${{ fromJson('["0", "1"]')[inputs.do_instrumentation] }} | |
| timeout_minutes: 180 | |
| TestITC18: | |
| name: 🧪 Test ITC18-USB ${{ matrix.name }} | |
| needs: | |
| - BuildInstaller | |
| - CompilationTest | |
| - TestWithoutHardware | |
| strategy: | |
| matrix: | |
| include: | |
| - experiment: Packages/tests/HardwareBasic/HardwareBasic.pxp | |
| name: HardwareBasic | |
| - experiment: Packages/tests/HardwareAnalysisFunctions/HardwareAnalysisFunctions.pxp | |
| name: HardwareAnalysisFunctions | |
| uses: ./.github/workflows/test-igor-workflow.yml | |
| with: | |
| job_name: 🧪 Test ITC18-USB ${{ matrix.name }} | |
| overwrite_job_name: ${{ inputs.is_called_workflow || false }} | |
| experiment: ${{ matrix.experiment }} | |
| target: "[ 'self-hosted', 'Windows', 'IgorPro', 'ITC18' ]" | |
| artifact_name: TestITC18-${{ matrix.name }}-assets | |
| expensive_checks: "1" | |
| instrument_tests: ${{ fromJson('["0", "1"]')[inputs.do_instrumentation] }} | |
| timeout_minutes: 180 | |
| TestITC1600: | |
| name: 🧪 Test ITC1600 ${{ matrix.name }} | |
| needs: | |
| - BuildInstaller | |
| - CompilationTest | |
| - TestWithoutHardware | |
| strategy: | |
| matrix: | |
| include: | |
| - experiment: Packages/tests/HardwareBasic/HardwareBasic-ITC1600.pxp | |
| name: HardwareBasic | |
| - experiment: Packages/tests/HardwareAnalysisFunctions/HardwareAnalysisFunctions-ITC1600.pxp | |
| name: HardwareAnalysisFunctions | |
| uses: ./.github/workflows/test-igor-workflow.yml | |
| with: | |
| job_name: 🧪 Test ITC1600 ${{ matrix.name }} | |
| overwrite_job_name: ${{ inputs.is_called_workflow || false }} | |
| experiment: ${{ matrix.experiment }} | |
| target: "[ 'self-hosted', 'Windows', 'IgorPro', 'ITC1600' ]" | |
| artifact_name: TestITC1600-${{ matrix.name }}-assets | |
| expensive_checks: "1" | |
| instrument_tests: ${{ fromJson('["0", "1"]')[inputs.do_instrumentation] }} | |
| timeout_minutes: 180 | |
| ValidateNwb: | |
| name: 👮🏼 Validate NWBv2 | |
| runs-on: [ self-hosted, Linux, Docker ] | |
| needs: | |
| - TestITC18 | |
| - TestITC1600 | |
| - TestNI | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Initial repo config | |
| run: tools/initial-repo-config.sh | |
| - name: Download ITC18-USB artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: TestITC18-* | |
| - name: Download ITC1600 artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: TestITC1600-* | |
| - name: Download NI artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: TestNI-* | |
| - name: Validate and read NWBv2 files | |
| run: tools/nwb-read-tests/run.sh | |
| FTPUpload: | |
| name: 📦 FTP Upload Artifacts | |
| runs-on: [ self-hosted, Linux, Docker ] | |
| if: ${{ !cancelled() && !inputs.is_called_workflow}} | |
| needs: | |
| # All jobs that create new artifacts | |
| - BuildInstaller | |
| - CompilationEachCommitTest | |
| - CompilationTest | |
| - Documentation | |
| - TestWithoutHardware | |
| - TestNI | |
| - TestITC18 | |
| - TestITC1600 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Initial repo config | |
| run: tools/initial-repo-config.sh | |
| - name: Download all artifacts | |
| id: download | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Flatten artifact structure | |
| run: | | |
| find "${{ steps.download.outputs.download-path }}" -mindepth 1 -maxdepth 1 -type d |\ | |
| xargs -I {} tools/ftp-upload/flatten-files.sh "{}" | |
| - name: Compress some artifacts | |
| run: tools/ftp-upload/compress-files.sh "${{ steps.download.outputs.download-path }}" | |
| - name: Upload artifacts using FTP | |
| run: | | |
| tools/ftp-upload/upload-files.sh \ | |
| -s "${{ vars.GHA_MIES_FTP_ARTEFACT_STORAGE_DNS }}" \ | |
| -u "${{ secrets.GHA_MIES_FTP_ARTEFACT_STORAGE_USER }}" \ | |
| -p "${{ secrets.GHA_MIES_FTP_ARTEFACT_STORAGE_PWD }}" \ | |
| -d "${{ steps.download.outputs.download-path }}" \ | |
| -t "ci-artifacts/$(echo "${{ github.ref_name }}" | sed "s@/@_@g")/${{ github.sha }}/${{ github.run_attempt }}" |