]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
build: Streamline workflows with nvme-cli
authorDaniel Wagner <dwagner@suse.de>
Thu, 16 Feb 2023 15:22:55 +0000 (16:22 +0100)
committerDaniel Wagner <wagi@monom.org>
Thu, 16 Feb 2023 18:14:12 +0000 (19:14 +0100)
Make the build workflow similiar to the one we have in nvme-cli.

- Explicitly configure release/debug build
- Explicitly set wrap mode
- Explicitly enable/disable --werror (disable it for fallbacks)
- Cleanup install depedencies
- Merge muon.yml into build.yml
- Move coverage into coverage.yml

Signed-off-by: Daniel Wagner <dwagner@suse.de>
.github/cross/clang.txt [new file with mode: 0644]
.github/workflows/build.yml
.github/workflows/coverage.yml [new file with mode: 0644]
.github/workflows/muon.yml [deleted file]
.github/workflows/release-python.yml [moved from .github/workflows/python-publish.yml with 95% similarity]
.github/workflows/release.yml

diff --git a/.github/cross/clang.txt b/.github/cross/clang.txt
new file mode 100644 (file)
index 0000000..1484a3e
--- /dev/null
@@ -0,0 +1,5 @@
+[binaries]
+c = 'clang'
+cpp = 'clang++'
+strip = 'strip'
+pkgconfig = 'pkg-config'
index c24df08cd8e183e9a98626cdcacaa72191bcd9a4..5a6478f7c033b406b9d7dfdb47f848a47bde3a69 100644 (file)
-name: libnvme build
+---
+name: build
 
 on:
   push:
-    branches: [ master ]
+    branches: [master]
   pull_request:
-    branches: [ master ]
+    branches: [master]
 
   workflow_dispatch:
 
 jobs:
-  build-disto:
+  gcc-debug:
+    name: gcc debug
     runs-on: ubuntu-latest
     steps:
       - name: install libraries
-        run: sudo apt-get install libjson-c-dev libdbus-1-dev
+        run: sudo apt-get install gcc pkg-config libjson-c-dev libssl-dev python3-dev
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
           python-version: '3.x'
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          setup-options: --werror -Dlibdbus=enabled
-          options: --verbose
           action: test
-      # Preserve meson's log file on failure
+          setup-options: >
+            --werror
+            --buildtype=debug
+            --wrap-mode=nofallback
+          meson-version: 0.61.2
       - uses: actions/upload-artifact@v3
         if: failure()
         with:
-          name: Linux_Meson_Testlog
-          path: build/meson-logs/testlog.txt
+          name: gcc debug build logs
+          path: build/meson-logs/meson-log.txt
 
-  build-cross-armhf:
+  gcc-release:
+    name: gcc release
     runs-on: ubuntu-latest
     steps:
-      - name: set up arm architecture
-        run: |
-          export release=$(lsb_release -c -s)
-          sudo dpkg --add-architecture armhf
-          sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
-          sudo dd of=/etc/apt/sources.list.d/armhf.list <<EOF
-          deb [arch=armhf] http://ports.ubuntu.com/ $release main universe restricted"
-          deb [arch=armhf] http://ports.ubuntu.com/ $release-updates main universe restricted"
-          EOF
-          sudo apt update
-      - name: install armhf compiler
-        run: sudo apt install gcc-arm-linux-gnueabihf pkg-config qemu-user-static
       - name: install libraries
-        run: sudo apt install libjson-c-dev:armhf
+        run: sudo apt-get install gcc pkg-config libjson-c-dev libdbus-1-dev python3-dev
       - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: '3.x'
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          # suppress python for now; the python headers currently assume native
-          setup-options: --werror --cross-file=.github/cross/ubuntu-armhf.txt --wrap-mode=nofallback -Dpython=false
-          options: --verbose
           action: test
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=nofallback
+            -Dlibdbus=enabled
+          meson-version: 0.61.2
       - uses: actions/upload-artifact@v3
         if: failure()
         with:
-          name: Linux_Meson_Testlog
-          path: build/meson-logs/testlog.txt
+          name: gcc debug build log
+          path: build/meson-logs/meson-log.txt
 
-  build-cross-ppc64le:
+  clang-release:
+    name: clang release
     runs-on: ubuntu-latest
     steps:
-      - name: set up ppc64le architecture
-        run: |
-          export release=$(lsb_release -c -s)
-          sudo dpkg --add-architecture ppc64el
-          sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
-          sudo dd of=/etc/apt/sources.list.d/ppc64el.list <<EOF
-          deb [arch=ppc64el] http://ports.ubuntu.com/ $release main universe restricted"
-          deb [arch=ppc64el] http://ports.ubuntu.com/ $release-updates main universe restricted"
-          EOF
-          sudo apt update
-      - name: install powerpc64le compiler
-        run: sudo apt install gcc-powerpc64le-linux-gnu pkg-config qemu-user-static
       - name: install libraries
-        run: sudo apt install libjson-c-dev:ppc64el
+        run: sudo apt-get install clang pkg-config libjson-c-dev libdbus-1-dev python3-dev
       - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: '3.x'
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          # suppress python for now; the python headers currently assume native
-          setup-options: --werror --cross-file=.github/cross/ubuntu-ppc64le.txt --wrap-mode=nofallback -Dpython=false
-          options: --verbose
           action: test
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=nofallback
+            --cross-file=.github/cross/clang.txt
+            -Dlibdbus=enabled
+          meson-version: 0.61.2
       - uses: actions/upload-artifact@v3
         if: failure()
         with:
-          name: Linux_Meson_Testlog
-          path: build/meson-logs/testlog.txt
+          name: gcc debug build log
+          path: build/meson-logs/meson-log.txt
 
-  build-cross-s390x:
+  fallback-shared-libraries:
+    name: fallback shared libraries
     runs-on: ubuntu-latest
     steps:
-      - name: set up s390x architecture
-        run: |
-          export release=$(lsb_release -c -s)
-          sudo dpkg --add-architecture s390x
-          sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
-          sudo dd of=/etc/apt/sources.list.d/s390x.list <<EOF
-          deb [arch=s390x] http://ports.ubuntu.com/ $release main universe restricted"
-          deb [arch=s390x] http://ports.ubuntu.com/ $release-updates main universe restricted"
-          EOF
-          sudo apt update
-      - name: install s390x compiler
-        run: sudo apt install gcc-s390x-linux-gnu pkg-config qemu-user-static
       - name: install libraries
-        run: sudo apt install libjson-c-dev:s390x
+        run: sudo apt-get install libpam-dev libcap-ng-dev
       - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: '3.x'
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          # suppress python for now; the python headers currently assume native
-          setup-options: --werror --cross-file=.github/cross/ubuntu-s390x.txt --wrap-mode=nofallback -Dpython=false
-          options: --verbose
           action: test
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=forcefallback
+            -Dlibdbus=enabled
+            -Ddbus:werror=false
+            -Dopenssl:werror=false
+          meson-version: 0.61.2
       - uses: actions/upload-artifact@v3
         if: failure()
         with:
-          name: Linux_Meson_Testlog
-          path: build/meson-logs/testlog.txt
+          name: fallback shared libraries build log
+          path: build/meson-logs/meson-log.txt
 
-  build-fallback:
+  fallback-static-libraries:
+    name: fallback static libraries
     runs-on: ubuntu-latest
     steps:
       - name: install libraries
-        run: sudo apt-get install -y libpam-dev libcap-ng-dev
+        run: sudo apt-get install libpam-dev libcap-ng-dev
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
           python-version: '3.x'
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          setup-options: --wrap-mode=forcefallback -Dlibdbus=enabled
-          options: --verbose
           action: test
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=forcefallback
+            --default-library=static
+            -Dlibdbus=enabled
+            -Ddbus:werror=false
+            -Dopenssl:werror=false
           meson-version: 0.61.2
-      # Preserve meson's log file on failure
       - uses: actions/upload-artifact@v3
         if: failure()
         with:
-          name: Linux_Meson_log
+          name: fallback static libraries build log
           path: build/meson-logs/meson-log.txt
 
-  build-with-libray-static:
+  fallback-all-static:
+    name: fallback all static
     runs-on: ubuntu-latest
     steps:
       - name: install libraries
-        run: sudo apt-get install -y libpam-dev libcap-ng-dev
+        run: sudo apt-get install libpam-dev libcap-ng-dev
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
           python-version: '3.x'
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          setup-options: --wrap-mode=forcefallback --default-library=static -Dlibdbus=enabled
-          options: --verbose
           action: test
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=forcefallback
+            --default-library=static
+            --cross-file=.github/cross/ubuntu-static.txt
+            -Dlibdbus=enabled
+            -Ddbus:werror=false
+            -Dopenssl:werror=false
           meson-version: 0.61.2
-      # Preserve meson's log file on failure
       - uses: actions/upload-artifact@v3
         if: failure()
         with:
-          name: Linux_Meson_log
+          name: fallback all static build log
           path: build/meson-logs/meson-log.txt
 
-  build-static:
+  cross-armhf:
+    name: cross armhf
     runs-on: ubuntu-latest
     steps:
+      - name: set up arm architecture
+        run: |
+          export release=$(lsb_release -c -s)
+          sudo dpkg --add-architecture armhf
+          sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
+          sudo dd of=/etc/apt/sources.list.d/armhf.list <<EOF
+          deb [arch=armhf] http://ports.ubuntu.com/ $release main universe restricted"
+          deb [arch=armhf] http://ports.ubuntu.com/ $release-updates main universe restricted"
+          EOF
+          sudo apt update
+      - name: install armhf compiler
+        run: sudo apt install gcc-arm-linux-gnueabihf pkg-config qemu-user-static
       - name: install libraries
-        run: sudo apt-get install -y libpam-dev libcap-ng-dev
+        run: sudo apt install libjson-c-dev:armhf
       - uses: actions/checkout@v3
-      - uses: actions/setup-python@v4
-        with:
-          python-version: '3.x'
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          setup-options: --wrap-mode=forcefallback --cross-file=.github/cross/ubuntu-static.txt --default-library=static -Dlibdbus=enabled
-          options: --verbose
           action: test
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=nofallback
+            --cross-file=.github/cross/ubuntu-armhf.txt
+            -Dpython=false
           meson-version: 0.61.2
-      # Preserve meson's log file on failure
       - uses: actions/upload-artifact@v3
         if: failure()
         with:
-          name: Linux_Meson_log
+          name: cross armhf build log
           path: build/meson-logs/meson-log.txt
 
-  code-coverage:
+  cross-ppc64le:
+    name: cross ppc64le
     runs-on: ubuntu-latest
     steps:
+      - name: set up ppc64le architecture
+        run: |
+          export release=$(lsb_release -c -s)
+          sudo dpkg --add-architecture ppc64el
+          sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
+          sudo dd of=/etc/apt/sources.list.d/ppc64el.list <<EOF
+          deb [arch=ppc64el] http://ports.ubuntu.com/ $release main universe restricted"
+          deb [arch=ppc64el] http://ports.ubuntu.com/ $release-updates main universe restricted"
+          EOF
+          sudo apt update
+      - name: install powerpc64le compiler
+        run: sudo apt install gcc-powerpc64le-linux-gnu pkg-config qemu-user-static
       - name: install libraries
-        run: sudo apt-get install libjson-c-dev libdbus-1-dev lcov
+        run: sudo apt install libjson-c-dev:ppc64el
       - uses: actions/checkout@v3
-      - uses: actions/setup-python@v4
+      - uses: BSFishy/meson-build@v1.0.3
         with:
-          python-version: '3.x'
+          action: test
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=nofallback
+            --cross-file=.github/cross/ubuntu-ppc64le.txt
+            -Dpython=false
+          meson-version: 0.61.2
+      - uses: actions/upload-artifact@v3
+        if: failure()
+        with:
+          name: cross ppc64le build log
+          path: build/meson-logs/meson-log.txt
+
+  cross-s390x:
+    name: cross s390x
+    runs-on: ubuntu-latest
+    steps:
+      - name: set up s390x architecture
+        run: |
+          export release=$(lsb_release -c -s)
+          sudo dpkg --add-architecture s390x
+          sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
+          sudo dd of=/etc/apt/sources.list.d/s390x.list <<EOF
+          deb [arch=s390x] http://ports.ubuntu.com/ $release main universe restricted"
+          deb [arch=s390x] http://ports.ubuntu.com/ $release-updates main universe restricted"
+          EOF
+          sudo apt update
+      - name: install s390x compiler
+        run: sudo apt install gcc-s390x-linux-gnu pkg-config qemu-user-static
+      - name: install libraries
+        run: sudo apt install libjson-c-dev:s390x
+      - uses: actions/checkout@v3
       - uses: BSFishy/meson-build@v1.0.3
         with:
-          setup-options: -Db_coverage=true --werror
-          options: --verbose
-          # Can't use 'coverage' here, see https://github.com/BSFishy/meson-build/issues/4
           action: test
-      - name: Generate Coverage Report
-        # Can't use meson here, see https://github.com/mesonbuild/meson/issues/7895
-        run: ninja -C build coverage --verbose
-      - uses: codecov/codecov-action@v3
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=nofallback
+            --cross-file=.github/cross/ubuntu-s390x.txt
+            -Dpython=false
+          meson-version: 0.61.2
+      - uses: actions/upload-artifact@v3
+        if: failure()
         with:
-          fail_ci_if_error: false
+          name: cross s390x build log
+          path: build/meson-logs/meson-log.txt
+
+  build-muon:
+    name: muon minimal
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+      - name: build muon and samury build-tool
+        run: |
+          mkdir build-tools
+          cd build-tools
+          git clone --depth 1 https://git.sr.ht/~lattis/muon
+          cd muon
+
+          export CC=gcc
+          export ninja=build/samu
+
+          ./tools/bootstrap_ninja.sh build
+          ./bootstrap.sh build
+
+          build/muon setup           \
+              -Dlibcurl=disabled     \
+              -Dlibarchive=disabled  \
+              -Ddocs=disabled        \
+              -Dsamurai=disabled     \
+              build
+          build/samu -C build
+          build/muon -C build test
+      - name: build libnvme
+        run: |
+          export PATH=$(pwd)/build-tools/muon/build:$PATH
+
+          muon setup                \
+              -Dpython=false        \
+              -Dopenssl=disabled    \
+              -Dlibdbus=disabled    \
+              -Djson-c=disabled     \
+              build
+          samu -C build
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
new file mode 100644 (file)
index 0000000..e26ffab
--- /dev/null
@@ -0,0 +1,38 @@
+---
+name: coverage
+
+on:
+  push:
+    branches: [master]
+
+jobs:
+  code-coverage:
+    name: code coverage
+    runs-on: ubuntu-latest
+    steps:
+      - name: install libraries
+        run: sudo apt-get install libjson-c-dev libdbus-1-dev lcov
+      - uses: actions/checkout@v3
+      - uses: actions/setup-python@v4
+        with:
+          python-version: '3.x'
+      - uses: BSFishy/meson-build@v1.0.3
+        with:
+          # Can't use 'coverage' here, see
+          # https://github.com/BSFishy/meson-build/issues/4
+          action: test
+          options: --verbose
+          setup-options: >
+            --werror
+            --buildtype=release
+            --wrap-mode=nofallback
+            -Dlibdbus=enabled
+            -Db_coverage=true
+          meson-version: 0.61.2
+      - name: Generate Coverage Report
+        # Can't use meson here, see
+        # https://github.com/mesonbuild/meson/issues/7895
+        run: ninja -C build coverage --verbose
+      - uses: codecov/codecov-action@v3
+        with:
+          fail_ci_if_error: false
diff --git a/.github/workflows/muon.yml b/.github/workflows/muon.yml
deleted file mode 100644 (file)
index 06d129c..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
----
-name: libnvme muon
-
-on:
-  push:
-    branches: [ master ]
-  pull_request:
-    branches: [ master ]
-
-jobs:
-  build-minimal:
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@v3
-      - name: build muon
-        run: |
-          mkdir build-tools
-          cd build-tools
-          git clone --depth 1 https://git.sr.ht/~lattis/muon
-          cd muon
-
-          export CC=gcc
-          export ninja=build/samu
-
-          ./tools/bootstrap_ninja.sh build
-          ./bootstrap.sh build
-
-          build/muon setup -Dlibcurl=disabled -Dlibarchive=disabled -Ddocs=disabled -Dsamurai=disabled build
-          build/samu -C build
-          build/muon -C build test
-
-      - name: build libnvme
-        run: |
-          export PATH=$(pwd)/build-tools/muon/build:$PATH
-
-          muon setup -Dprefix=/tmp/nvme-cli-muon -Dpython=false -Dopenssl=disabled -Dlibdbus=disabled -Djson-c=disabled build-libnvme
-          samu -C build-libnvme
similarity index 95%
rename from .github/workflows/python-publish.yml
rename to .github/workflows/release-python.yml
index 09fef2fb834587d11dd034d923f528e2b521f213..32bf2d072bb8fecc0f0d1c003e1dd84b2eeeaf06 100644 (file)
@@ -1,12 +1,14 @@
-name: Build and upload to PyPI
+---
+name: release python
 
 on:
   push:
-    branches: [ master ]
+    branches: [master]
     tags:
       - '**'
   pull_request:
-    branches: [ master ]
+    branches: [master]
+
   workflow_dispatch:
 
 jobs:
index e0255a8883c3512639126259336c15ec518e70f5..6ca27417537b8f3ea4769820afd616439407aabe 100644 (file)
@@ -1,8 +1,9 @@
-name: Releases
+---
+name: release
 
 on:
   push:
-    branches: [ master ]
+    branches: [master]
     tags:
       - '**'
 
@@ -13,7 +14,7 @@ jobs:
     permissions:
       contents: write
     steps:
-    - uses: actions/checkout@v3
-    - uses: ncipollo/release-action@v1
-      with:
-        token: ${{ secrets.GITHUB_TOKEN }}
+      - uses: actions/checkout@v3
+      - uses: ncipollo/release-action@v1
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}