fix debian build #87
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: ci | |
| on: | |
| push: {branches-ignore: [latest], tags: ['*']} | |
| pull_request: | |
| env: | |
| PACKAGE_NAME: ${{ github.event.repository.name }} | |
| PACKAGE_VERSION: ${{ github.sha }} | |
| # MYCI_NEXUS_USERNAME: cppfw | |
| # MYCI_NEXUS_PASSWORD: ${{ secrets.MYCI_NEXUS_PASSWORD }} | |
| MYCI_GIT_USERNAME: igagis | |
| MYCI_GIT_PASSWORD: ${{ secrets.MYCI_GIT_ACCESS_TOKEN }} | |
| jobs: | |
| ##### coverage ##### | |
| coverage: | |
| runs-on: ubuntu-latest | |
| container: debian:bookworm | |
| name: coverage - measure | |
| env: | |
| linux_distro: debian | |
| linux_release: bookworm | |
| steps: | |
| - name: add cppfw deb repo | |
| uses: myci-actions/add-deb-repo@main | |
| with: | |
| repo: deb https://gagis.hopto.org/repo/cppfw/${{ env.linux_distro }} ${{ env.linux_release }} main | |
| repo-name: cppfw | |
| keys-asc: https://gagis.hopto.org/repo/cppfw/pubkey.gpg | |
| install: myci locales git pipx | |
| - name: add llvm repo (for clang-format) | |
| uses: myci-actions/add-deb-repo@main | |
| with: | |
| repo: deb http://apt.llvm.org/${{ env.linux_release }} llvm-toolchain-${{ env.linux_release }} main | |
| repo-name: llvm | |
| keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key | |
| - name: git clone | |
| uses: myci-actions/checkout@main | |
| - name: prepare debian package | |
| run: myci-deb-prepare.sh | |
| - name: install deps | |
| run: myci-deb-install-build-deps.sh | |
| - name: add DE locale | |
| # needed for testing that locale with "," as decimal delimiter does not break the parsing with string_parser | |
| run: | | |
| echo "de_DE.UTF-8 UTF-8" >> /etc/locale.gen | |
| locale-gen | |
| - name: build | |
| run: make config=gcov | |
| - name: test | |
| run: make config=gcov test | |
| - name: generate coverage report | |
| # due to some bug in gcov, we need to use --gcov-ignore-parse-errors=negative_hits.warn | |
| run: pipx run gcovr --gcov-ignore-parse-errors=negative_hits.warn --exclude-throw-branches --filter src/ --cobertura > cobertura.xml | |
| - name: upload coverage report to artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: cobertura.xml | |
| path: cobertura.xml | |
| - name: upload coverage data to codecov.io | |
| uses: codecov/codecov-action@v5 | |
| if: always() # even if previous steps fail, this one needs to be run | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| # do not search for coverage files automatically, upload only specified files | |
| disable_search: true | |
| files: cobertura.xml | |
| # flags: unittests # optional | |
| name: codecov-umbrella # optional | |
| fail_ci_if_error: true # optional (default = false) | |
| verbose: true # optional (default = false) | |
| - name: upload test report to codecov.io | |
| if: always() # even if previous steps fail, this one needs to be run | |
| uses: codecov/test-results-action@v1 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| # do not search for coverage files automatically, upload only specified files | |
| disable_search: true | |
| files: tests/unit/out/gcov/junit.xml | |
| name: codecov-umbrella # optional | |
| fail_ci_if_error: true # optional (default = false) | |
| verbose: true # optional (default = false) | |
| ##### sanitizer ##### | |
| sanitizer: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - {os: debian, codename: bookworm, image_owner: } | |
| - {os: debian, codename: bookworm, image_owner: arm32v7/, labels: [ubuntu-24.04-arm]} | |
| - {os: debian, codename: bookworm, image_owner: arm64v8/, labels: [ubuntu-24.04-arm]} | |
| runs-on: ${{ (matrix.labels == '' && 'ubuntu-latest') || matrix.labels }} | |
| container: ${{ matrix.image_owner }}${{ matrix.os }}:${{ matrix.codename }} | |
| name: sanitizer - ${{ matrix.image_owner }}${{ matrix.os }}:${{ matrix.codename }} | |
| steps: | |
| - name: add cppfw deb repo | |
| uses: myci-actions/add-deb-repo@main | |
| with: | |
| repo: deb https://gagis.hopto.org/repo/cppfw/${{ matrix.os }} ${{ matrix.codename }} main | |
| repo-name: cppfw | |
| keys-asc: https://gagis.hopto.org/repo/cppfw/pubkey.gpg | |
| install: myci git | |
| - name: add llvm repo (for clang-format) | |
| uses: myci-actions/add-deb-repo@main | |
| with: | |
| repo: deb http://apt.llvm.org/${{ matrix.codename }} llvm-toolchain-${{ matrix.codename }} main | |
| repo-name: llvm | |
| keys-asc: https://apt.llvm.org/llvm-snapshot.gpg.key | |
| - name: install ci tools | |
| run: | | |
| apt install --assume-yes devscripts equivs | |
| - name: git clone | |
| uses: myci-actions/checkout@main | |
| - name: prepare debian package | |
| run: myci-deb-prepare.sh | |
| - name: install deps | |
| run: myci-deb-install-build-deps.sh | |
| - name: build | |
| run: make config=asan | |
| - name: test | |
| run: make config=asan test | |
| ##### deb linux ##### | |
| deb_linux: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # - {os: debian, codename: buster, image_owner: , package_type: deb} | |
| # - {os: debian, codename: buster, image_owner: i386/, package_type: deb, labels: [i386,docker]} | |
| # - {os: debian, codename: buster, image_owner: arm32v7/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| # - {os: debian, codename: bullseye, image_owner: , package_type: deb} | |
| # - {os: debian, codename: bullseye, image_owner: i386/, package_type: deb, labels: [i386,docker]} | |
| # - {os: debian, codename: bullseye, image_owner: arm32v7/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| # - {os: debian, codename: bullseye, image_owner: arm64v8/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| - {os: debian, codename: bookworm, image_owner: , package_type: deb} | |
| # - {os: debian, codename: bookworm, image_owner: i386/, package_type: deb, labels: [i386,docker]} | |
| - {os: debian, codename: bookworm, image_owner: arm32v7/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| - {os: debian, codename: bookworm, image_owner: arm64v8/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| # - {os: ubuntu, codename: focal, image_owner: , package_type: deb} | |
| # - {os: ubuntu, codename: jammy, image_owner: , package_type: deb} | |
| - {os: ubuntu, codename: noble, image_owner: , package_type: deb} | |
| # - {os: raspbian, codename: buster, image_owner: igagis/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| # - {os: raspbian, codename: bullseye, image_owner: igagis/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| # - {os: raspbian, codename: bookworm, image_owner: igagis/, package_type: deb, labels: [ubuntu-24.04-arm]} | |
| runs-on: ${{ (matrix.labels == '' && 'ubuntu-latest') || matrix.labels }} | |
| container: ${{ matrix.image_owner }}${{ matrix.os }}:${{ matrix.codename }} | |
| name: linux - ${{ matrix.image_owner }}${{ matrix.os }}:${{ matrix.codename }} | |
| steps: | |
| - name: set TZ for ubuntu:focal | |
| run: | | |
| # configure timezone to avoid 'tzdata' package to require user interaction during installation (needed for ubuntu:focal) | |
| TZ=Europe/Helsinki ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone | |
| - name: add cppfw deb repo | |
| uses: myci-actions/add-deb-repo@main | |
| with: | |
| repo: deb https://gagis.hopto.org/repo/cppfw/${{ matrix.os }} ${{ matrix.codename }} main | |
| repo-name: cppfw | |
| keys-asc: https://gagis.hopto.org/repo/cppfw/pubkey.gpg | |
| install: myci git devscripts equivs | |
| - name: git clone | |
| uses: myci-actions/checkout@main | |
| - name: set PACKAGE_VERSION | |
| uses: myci-actions/export-env-var@main | |
| with: {name: PACKAGE_VERSION, value: $(myci-deb-version.sh)} | |
| - name: prepare debian package | |
| run: myci-deb-prepare.sh | |
| - name: install deps | |
| run: myci-deb-install-build-deps.sh | |
| - name: build | |
| run: | | |
| cd build | |
| dpkg-buildpackage --unsigned-source --unsigned-changes | |
| - name: deploy deb packages | |
| run: | | |
| echo "${{ secrets.MYCI_REPO_SSH_KEY }}" > repo_key_rsa && chmod 600 repo_key_rsa | |
| myci-deploy-apt-ssh.sh --key repo_key_rsa --server gagis.hopto.org --repo cppfw/${{ matrix.os }} --distro ${{ matrix.codename }} --component main lib${PACKAGE_NAME}*_${PACKAGE_VERSION}_*.*deb | |
| if: matrix.package_type == 'deb' && startsWith(github.ref, 'refs/tags/') | |
| ##### macosx ##### | |
| macosx: | |
| runs-on: macos-latest | |
| steps: | |
| - name: workaround python2 and python3 issue when upgrading python | |
| run : | | |
| rm -rf /usr/local/bin/2to3* | |
| rm -rf /usr/local/bin/idle3* | |
| rm -rf /usr/local/bin/pydoc3* | |
| rm -rf /usr/local/bin/python3 | |
| rm -rf /usr/local/bin/python3-config | |
| rm -rf /usr/local/bin/python3* | |
| rm -rf /usr/local/bin/python3*-config | |
| - name: git clone | |
| uses: myci-actions/checkout@main | |
| - name: install clang-tidy and clang-format | |
| run: | | |
| brew install llvm | |
| ln -s "$(brew --prefix llvm)/bin/clang-format" "/usr/local/bin/clang-format" | |
| ln -s "$(brew --prefix llvm)/bin/clang-tidy" "/usr/local/bin/clang-tidy" | |
| ln -s "$(brew --prefix llvm)/bin/clang-apply-replacements" "/usr/local/bin/clang-apply-replacements" | |
| - name: add cppfw tap | |
| run: | | |
| brew tap cppfw/tap | |
| brew update | |
| - name: install ci tools | |
| run: brew install myci make | |
| - name: set PATH to use latest make | |
| uses: myci-actions/export-env-var@main | |
| with: {name: PATH, value: "$HOMEBREW_PREFIX/opt/make/libexec/gnubin:$PATH"} | |
| - name: set CFLAGS | |
| uses: myci-actions/export-env-var@main | |
| with: {name: CFLAGS, value: "-isystem $HOMEBREW_PREFIX/include $CFLAGS"} | |
| - name: set CXXFLAGS | |
| uses: myci-actions/export-env-var@main | |
| with: {name: CXXFLAGS, value: "-isystem $HOMEBREW_PREFIX/include $CXXFLAGS"} | |
| - name: set LDFLAGS | |
| uses: myci-actions/export-env-var@main | |
| with: {name: LDFLAGS, value: "-L $HOMEBREW_PREFIX/lib $LDFLAGS"} | |
| - name: install deps | |
| run: myci-brew-install.sh `myci-list-deps-homebrew.sh` | |
| - name: build | |
| run: make --include-dir=$(brew --prefix)/include | |
| - name: test | |
| run: make --include-dir=$(brew --prefix)/include test | |
| - name: deploy | |
| run: myci-deploy-homebrew.sh --tap cppfw/tap | |
| if: startsWith(github.ref, 'refs/tags/') | |
| ##### msys2 ##### | |
| msys2: | |
| runs-on: windows-latest | |
| defaults: | |
| run: | |
| shell: msys2 {0} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - {arch: i686, repo: mingw32} | |
| - {arch: x86_64, repo: mingw64} | |
| name: msys2 - ${{ matrix.repo }} | |
| steps: | |
| - name: make msys2 to provide the default shell | |
| uses: msys2/setup-msys2@v2 | |
| with: | |
| update: true | |
| msystem: MSYS | |
| install: >- | |
| msys2-devel | |
| mingw-w64-${{ matrix.arch }}-toolchain | |
| - name: add cppfw pacman msys repo | |
| uses: myci-actions/add-pacman-repo@main | |
| with: | |
| name: cppfw_msys | |
| url: https://gagis.hopto.org/repo/cppfw/msys2/msys | |
| shell: 'msys2 {0}' | |
| key-server: https://gagis.hopto.org/repo/cppfw/pubkey.gpg | |
| install: myci | |
| - name: add cppfw pacman msys/mingw repo | |
| uses: myci-actions/add-pacman-repo@main | |
| with: | |
| name: cppfw_${{ matrix.repo }} | |
| url: https://gagis.hopto.org/repo/cppfw/msys2/${{ matrix.repo }} | |
| shell: 'msys2 {0}' | |
| key-server: https://gagis.hopto.org/repo/cppfw/pubkey.gpg | |
| - name: git clone | |
| uses: myci-actions/checkout@main | |
| - name: prepare pacman package | |
| run: myci-apply-version.sh build/msys2/PKGBUILD.in | |
| - name: build | |
| # to make makepkg-mingw build only one architecture we need to set the MINGW_INSTALLS | |
| env: {MINGW_INSTALLS: '${{ matrix.repo }}'} | |
| run: | | |
| cd build/msys2 | |
| PKGEXT='.pkg.tar.xz' autojobs=true makepkg-mingw --syncdeps --noconfirm --skipinteg | |
| - name: deploy | |
| run: | | |
| echo "${{ secrets.MYCI_REPO_SSH_KEY }}" > repo_key_rsa && chmod 600 repo_key_rsa | |
| for f in $(find build/msys2 -name "mingw-w64-${{ matrix.arch }}-$PACKAGE_NAME-*-any.pkg.*"); do | |
| myci-deploy-pacman-ssh.sh --server gagis.hopto.org --key repo_key_rsa --repo cppfw/msys2/${{ matrix.repo }} --database cppfw_${{ matrix.repo }} $f | |
| done | |
| if: startsWith(github.ref, 'refs/tags/') |