]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
build-packages: move uploading and publishing packages to an action 16896/head
authorromeroalx <alexis.romero@open-xchange.com>
Fri, 6 Feb 2026 07:30:59 +0000 (08:30 +0100)
committerromeroalx <alexis.romero@open-xchange.com>
Tue, 17 Feb 2026 13:48:47 +0000 (14:48 +0100)
.github/workflows/build-packages.yml
tasks.py

index e8b29b989bd1325b7bfab9f084df82c8e67d1168..484a04e4369a7dc00ddbb7a851287ae11d8c552e 100644 (file)
@@ -121,6 +121,7 @@ jobs:
     outputs:
       product-name: ${{ steps.normalize-name.outputs.normalized-package-name }}
       version: ${{ steps.getversion.outputs.version }}
+      shortversion: ${{ steps.getversion.outputs.shortversion }}
       pkghashes-el-8-x86_64: ${{ steps.pkghashes.outputs.pkghashes-el-8-x86_64 }}
       pkghashes-el-8-aarch64: ${{ steps.pkghashes.outputs.pkghashes-el-8-aarch64 }}
       pkghashes-el-9-x86_64: ${{ steps.pkghashes.outputs.pkghashes-el-9-x86_64 }}
@@ -155,7 +156,10 @@ jobs:
       - run: IS_RELEASE=${IS_RELEASE} builder/build.sh -v -m ${PRODUCT} ${OS}
       - name: Get version number
         run: |
-          echo "version=$(readlink builder/tmp/latest)" >> $GITHUB_OUTPUT
+          version=$(readlink builder/tmp/latest)
+          shortversion=$(echo ${version} | grep -qq master && echo master || echo ${version} | awk -F. '{print $1$2}')
+          echo "version=${version}" >> $GITHUB_OUTPUT
+          echo "shortversion=${shortversion}" >> $GITHUB_OUTPUT
         id: getversion
       - name: Get target architecture
         run: |
@@ -325,249 +329,231 @@ jobs:
         os: ${{fromJson(needs.prepare.outputs.oslist)}}
         architecture: ${{ fromJson(needs.prepare.outputs.archlist )}}
       fail-fast: false
+    env:
+      OS: ${{ matrix.os }}
+      PACKAGES_DIR: "${{ github.workspace }}/packages"
+      ARCH: ${{ matrix.architecture }}
+      PRODUCT: ${{ needs.build.outputs.product-name }}
+      PRODUCT_REPO_NAME: ${{ inputs.product == 'authoritative' && 'auth' || ( inputs.product == 'recursor' && 'rec' || 'dnsdist') }}
+      VERSION: ${{ needs.build.outputs.version }}
+      SHORTVERSION: ${{ needs.build.outputs.shortversion }}
+    outputs:
+      check-finished: ${{ steps.check-finished.outputs.completed }}
     steps:
       - uses: actions/checkout@v5
         with:
           fetch-depth: 1
-          submodules: recursive
-      - name: install pyinvoke and pulp
-        run: |
-          python3 -m venv ${GITHUB_WORKSPACE}/.venv
-          . ${GITHUB_WORKSPACE}/.venv/bin/activate && pip install -r ${GITHUB_WORKSPACE}/builder-support/requirements.txt
-      - run: ${{ env.INV_CMD }} validate-pulp-credentials
-        env:
-          PULP_REPO_NAME: ${{ secrets.PULP_FILE_REPO_NAME }}
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
+          persist-credentials: false
       - name: Download packages
         uses: actions/download-artifact@v6
         with:
           pattern: "${{ inputs.product }}-${{ matrix.os }}-${{ needs.build.outputs.version }}-${{ matrix.architecture }}"
-          path: files/
-      - name: Normalize package name
-        id: normalize-name
+          path: "${{ runner.temp }}/files"
+      - name: Extract repo data
+        shell: bash
         run: |
-          shortversion=$(echo ${{ needs.build.outputs.version }} | grep -qq master && echo master || echo ${{ needs.build.outputs.version }} | awk -F. '{print $1$2}')
-          if [ "x${{ inputs.product }}" = "xauthoritative" ]; then
-            echo "normalized-package-name=pdns" >> $GITHUB_OUTPUT
-            echo "normalized-product-name=auth-${shortversion}" >> $GITHUB_OUTPUT
-          elif [ "x${{ inputs.product }}" = "xrecursor" ]; then
-            echo "normalized-package-name=pdns-recursor" >> $GITHUB_OUTPUT
-            echo "normalized-product-name=rec-${shortversion}" >> $GITHUB_OUTPUT
+          distro=$(echo ${OS} | cut -d'-' -f1)
+          release=$(echo ${OS} | cut -d'-' -f2)
+
+          if echo ${distro} | egrep -qq "centos|el"; then
+            repo_type=rpm
+            repo_name="repo-${distro}-${release}-${ARCH}-${PRODUCT_REPO_NAME}-${SHORTVERSION}"
+          elif echo ${distro} | egrep -qq "ubuntu|debian"; then
+            repo_type=deb
+            repo_name="repo-${distro}"
+            distribution_name="${release}-${PRODUCT_REPO_NAME}-${SHORTVERSION}"
           else
-            echo "normalized-package-name=${{ inputs.product }}" >> $GITHUB_OUTPUT
-            echo "normalized-product-name=${{ inputs.product }}-${shortversion}" >> $GITHUB_OUTPUT
+            exit 1
           fi
-      - name: Extract and prepare files and packages
+
+          echo "repository-name=${repo_name}" >> ${GITHUB_ENV}
+          echo "distribution-name=${distribution_name}" >> ${GITHUB_ENV}
+          echo "repository-type=${repo_type}" >> ${GITHUB_ENV}
+      - name: Extract and move packages to destination folder
+        shell: bash
         run: |
-          # Extract packages
-          for i in $(ls ./files/*/*/*${{ matrix.architecture }}.tar.bz2); do mkdir -p ./packages/$(echo $i | cut -d '/' -f 2)/; tar -xvf $i -C ./packages/$(echo $i | cut -d '/' -f 2)/ --transform='s/.*\///'; done
-          # Move RPM files
-          for i in $(ls ./packages/*/*.rpm); do mkdir -p rpm_packages/${{ matrix.os }}.${{ matrix.architecture }}; mv $i rpm_packages/${{ matrix.os }}.${{ matrix.architecture }}/; done
-          # Move deb files
-          for i in $(ls ./packages/*/*.deb); do mkdir -p deb_packages/${{ matrix.os }}; mv $i deb_packages/${{ matrix.os }}/; done
-      - name: Upload DEB Packages
-        if: ${{ contains(matrix.os, 'ubuntu-') || ( contains(matrix.os, 'debian-')) }}
-        run: ${{ env.INV_CMD }} pulp-upload-deb-packages-by-folder deb_packages ${{ steps.normalize-name.outputs.normalized-product-name }}
-        env:
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
-      - name: Upload RPM Packages
-        if: ${{ contains(matrix.os, 'el-') || ( contains(matrix.os, 'centos-')) }}
-        run: ${{ env.INV_CMD }} pulp-upload-rpm-packages-by-folder rpm_packages ${{ steps.normalize-name.outputs.normalized-product-name }}
-        env:
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
+          mkdir -p ${PACKAGES_DIR}
+          tar -xvf ./${PRODUCT}/${VERSION}/${PRODUCT}-${VERSION}-${OS}-${ARCH}.tar.bz2
+          for i in `find . -type f -name "*.rpm"`; do cp $i ${PACKAGES_DIR}/; done
+          for i in `find . -type f -name "*.deb"`; do cp $i ${PACKAGES_DIR}/; done
+        working-directory: "${{ runner.temp }}/files"
+      - name: Upload packages
+        uses: PowerDNS/pdns/upload-to-pulp@meta
+        with:
+          pulp-api-url: ${{ secrets.PULP_URL }}
+          pulp-ci-username: ${{ secrets.PULP_CI_USERNAME }}
+          pulp-ci-password: ${{ secrets.PULP_CI_PASSWORD }}
+          repository-name: ${{ env.repository-name }}
+          distribution-name: ${{ env.distribution-name }}
+          repository-type: ${{ env.repository-type }}
+          packages-dir: ${{ env.PACKAGES_DIR }}
+          upload: 'true'
+          publish: ${{ env.repository-type == 'rpm' && 'true' || 'false' }}
+      - id: check-finished
+        run: echo "completed=yes" >> $GITHUB_OUTPUT
 
-  upload-src-files:
+  upload-build-dependencies:
     needs: [prepare, build, provenance-src, provenance-pkgs]
     continue-on-error: true
     if: ${{ needs.prepare.outputs.publish-packages == 'yes' }}
-    name: Upload source and other files
+    name: Upload build dependencies for ${{ matrix.os }} on ${{ matrix.architecture }}
     runs-on: ubuntu-24.04
     strategy:
       matrix:
         os: ${{fromJson(needs.prepare.outputs.oslist)}}
         architecture: ${{ fromJson(needs.prepare.outputs.archlist )}}
       fail-fast: false
+    env:
+      OS: ${{ matrix.os }}
+      PACKAGES_DIR: "${{ github.workspace }}/packages"
+      ARCH: ${{ matrix.architecture }}
+      PRODUCT: ${{ needs.build.outputs.product-name }}
+      VERSION: ${{ needs.build.outputs.version }}
     steps:
       - uses: actions/checkout@v5
         with:
           fetch-depth: 1
-          submodules: recursive
-      - name: install pyinvoke and pulp
-        run: |
-          python3 -m venv ${GITHUB_WORKSPACE}/.venv
-          . ${GITHUB_WORKSPACE}/.venv/bin/activate && pip install -r ${GITHUB_WORKSPACE}/builder-support/requirements.txt
-      - run: ${{ env.INV_CMD }} validate-pulp-credentials
-        env:
-          PULP_REPO_NAME: ${{ secrets.PULP_FILE_REPO_NAME }}
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
+          persist-credentials: false
       - name: Download packages
         uses: actions/download-artifact@v6
         with:
-          pattern: "${{ inputs.product }}-${{ matrix.os }}-${{ needs.build.outputs.version }}-${{ matrix.architecture }}"
-          path: files/
-      - name: Normalize package name
-        id: normalize-name
-        run: |
-          if [ "x${{ inputs.product }}" = "xauthoritative" ]; then
-            echo "normalized-package-name=pdns" >> $GITHUB_OUTPUT
-          elif [ "x${{ inputs.product }}" = "xrecursor" ]; then
-            echo "normalized-package-name=pdns-recursor" >> $GITHUB_OUTPUT
-          else
-            echo "normalized-package-name=${{ inputs.product }}" >> $GITHUB_OUTPUT
-          fi
-      - name: Extract and prepare files and packages
+          pattern: "${{ inputs.product }}-${{ matrix.os }}-${{ env.VERSION }}-${{ matrix.architecture }}"
+          path: "${{ runner.temp }}/files"
+      - name: Extract and move packages to destination folder
+        shell: bash
         run: |
-          # Extract packages
-          for i in $(ls ./files/*/*/*${{ matrix.architecture }}.tar.bz2); do mkdir -p ./packages/$(echo $i | cut -d '/' -f 2)/; tar -xvf $i -C ./packages/$(echo $i | cut -d '/' -f 2)/ --transform='s/.*\///'; done
-          # Add file with list of dependencies
-          for i in $(ls ./packages/*/*.json); do mv $i files/${{ steps.normalize-name.outputs.normalized-package-name }}/${{ needs.build.outputs.version }}/; done
-      - name: Upload build data
-        run: ${{ env.INV_CMD }} pulp-upload-file-packages-by-folder files
-        env:
-          PULP_REPO_NAME: ${{ secrets.PULP_FILE_REPO_NAME }}
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
+          mkdir -p ${PACKAGES_DIR}
+          tar -xvf ./${PRODUCT}/${VERSION}/${PRODUCT}-${VERSION}-${OS}-${ARCH}.tar.bz2
+          for i in `find . -type f -name "*.json"`; do cp $i ${PACKAGES_DIR}/; done
+        working-directory: "${{ runner.temp }}/files"
+      - name: Upload packages
+        uses: PowerDNS/pdns/upload-to-pulp@meta
+        with:
+          pulp-api-url: ${{ secrets.PULP_URL }}
+          pulp-ci-username: ${{ secrets.PULP_CI_USERNAME }}
+          pulp-ci-password: ${{ secrets.PULP_CI_PASSWORD }}
+          repository-name: ${{ secrets.PULP_FILE_REPO_NAME }}
+          repository-type: "file"
+          packages-dir: ${{ env.PACKAGES_DIR }}
+          destination-path: ${{ env.PRODUCT }}/${{ env.VERSION }}
 
-  upload-provenance-files:
+  upload-src-and-provenance-files:
     needs: [build, provenance-src, provenance-pkgs]
-    name: Upload provenance files
+    name: Upload source and provenance files
     continue-on-error: true
     if: ${{ needs.prepare.outputs.publish-packages == 'yes' }}
     runs-on: ubuntu-24.04
+    env:
+      OSLIST: ${{ inputs.os }}
+      PACKAGES_DIR: "${{ github.workspace }}/packages"
+      PRODUCT: ${{ needs.build.outputs.product-name }}
+      VERSION: ${{ needs.build.outputs.version }}
     steps:
       - uses: actions/checkout@v5
         with:
           fetch-depth: 1
-          submodules: recursive
-      - name: install pyinvoke and pulp
-        run: |
-          python3 -m venv ${GITHUB_WORKSPACE}/.venv
-          . ${GITHUB_WORKSPACE}/.venv/bin/activate && pip install -r ${GITHUB_WORKSPACE}/builder-support/requirements.txt
-      - run: ${{ env.INV_CMD }} validate-pulp-credentials
-        env:
-          PULP_REPO_NAME: ${{ secrets.PULP_FILE_REPO_NAME }}
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
+          persist-credentials: false
       - name: Download provenance files
         uses: actions/download-artifact@v6
         with:
-          pattern: "${{ inputs.product }}-${{ needs.build.outputs.version }}-*.intoto.jsonl"
-      - name: Normalize package name
-        id: normalize-name
+          pattern: "${{ inputs.product }}-${{ env.VERSION }}-*.intoto.jsonl"
+          path: "${{ runner.temp }}/files"
+      - name: Get OS name
+        shell: bash
         run: |
-          if [ "x${{ inputs.product }}" = "xauthoritative" ]; then
-            echo "normalized-package-name=pdns" >> $GITHUB_OUTPUT
-          elif [ "x${{ inputs.product }}" = "xrecursor" ]; then
-            echo "normalized-package-name=pdns-recursor" >> $GITHUB_OUTPUT
-          else
-            echo "normalized-package-name=${{ inputs.product }}" >> $GITHUB_OUTPUT
-          fi
-      - name: Extract and prepare files and packages
+          echo "OS=$(echo ${OSLIST} | awk '{print $1}')" >> $GITHUB_ENV
+      - name: Download a package artifact
+        uses: actions/download-artifact@v6
+        with:
+          pattern: "${{ inputs.product }}-${{ env.OS }}-${{ env.VERSION }}-x86_64"
+          path: "${{ runner.temp }}/files"
+      - name: Extract and move packages to destination folder
+        shell: bash
         run: |
-          # Prepare files folder
-          mkdir -p files/${{ steps.normalize-name.outputs.normalized-package-name }}/${{ needs.build.outputs.version }}
-          # Copy provenance files
-          cp *.jsonl/*.jsonl files/${{ steps.normalize-name.outputs.normalized-package-name }}/${{ needs.build.outputs.version }}/
-      - name: Upload provenance data
-        run: ${{ env.INV_CMD }} pulp-upload-file-packages-by-folder files
-        env:
-          PULP_REPO_NAME: ${{ secrets.PULP_FILE_REPO_NAME }}
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
+          mkdir -p ${PACKAGES_DIR}
+          for i in `find . -type f -name "*.jsonl"`; do cp $i ${PACKAGES_DIR}/; done
+          cp ./${PRODUCT}/${VERSION}/${PRODUCT}-${VERSION}.tar.* ${PACKAGES_DIR}/
+        working-directory: "${{ runner.temp }}/files"
+      - name: Upload packages
+        uses: PowerDNS/pdns/upload-to-pulp@meta
+        with:
+          pulp-api-url: ${{ secrets.PULP_URL }}
+          pulp-ci-username: ${{ secrets.PULP_CI_USERNAME }}
+          pulp-ci-password: ${{ secrets.PULP_CI_PASSWORD }}
+          repository-name: ${{ secrets.PULP_FILE_REPO_NAME }}
+          repository-type: "file"
+          packages-dir: ${{ env.PACKAGES_DIR }}
+          destination-path: ${{ env.PRODUCT }}/${{ env.VERSION }}
 
-  publish-packages:
+  # RPM packages are published in the step upload-packages as they are separated by distro/release/arch
+  publish-deb-packages:
     needs: [prepare, build, upload-packages]
+    if: ${{ needs.upload-packages.outputs.check-finished == 'yes' }}
     continue-on-error: true
-    name: Publish RPM and DEB packages
+    name: Publish DEB packages
     runs-on: ubuntu-24.04
     outputs:
-      check-finished: ${{ steps.check-finished.outputs.upload-completed }}
+      check-finished: ${{ steps.check-finished.outputs.completed }}
     steps:
       - uses: actions/checkout@v5
         with:
           fetch-depth: 1
-          submodules: recursive
-      - name: install pyinvoke and pulp
-        run: |
-          python3 -m venv ${GITHUB_WORKSPACE}/.venv
-          . ${GITHUB_WORKSPACE}/.venv/bin/activate && pip install -r ${GITHUB_WORKSPACE}/builder-support/requirements.txt
-      - name: Normalize product name
-        id: normalize-name
-        run: |
-          shortversion=$(echo ${{ needs.build.outputs.version }} | grep -qq master && echo master || echo ${{ needs.build.outputs.version }} | awk -F. '{print $1$2}')
-          if [ "x${{ inputs.product }}" = "xauthoritative" ]; then
-            echo "normalized-product-name=auth-${shortversion}" >> $GITHUB_OUTPUT
-          elif [ "x${{ inputs.product }}" = "xrecursor" ]; then
-            echo "normalized-product-name=rec-${shortversion}" >> $GITHUB_OUTPUT
-          else
-            echo "normalized-product-name=${{ inputs.product }}-${shortversion}" >> $GITHUB_OUTPUT
-          fi
-      - name: Publish DEB Packages
-        run: ${{ env.INV_CMD }} pulp-create-deb-publication
-        env:
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
-      - name: Publish RPM Packages
-        run: ${{ env.INV_CMD }} pulp-create-rpm-publication ${{ steps.normalize-name.outputs.normalized-product-name }} '${{ needs.prepare.outputs.oslist }}' '${{ needs.prepare.outputs.archlist }}'
-        env:
-          PULP_URL: ${{ secrets.PULP_URL }}
-          PULP_CI_USERNAME: ${{ secrets.PULP_CI_USERNAME }}
-          PULP_CI_PASSWORD: ${{ secrets.PULP_CI_PASSWORD }}
+          persist-credentials: false
+      - name: Publish Debian packages
+        if: ${{ contains(inputs.os, 'debian') }}
+        uses: PowerDNS/pdns/upload-to-pulp@meta
+        with:
+          pulp-api-url: ${{ secrets.PULP_URL }}
+          pulp-ci-username: ${{ secrets.PULP_CI_USERNAME }}
+          pulp-ci-password: ${{ secrets.PULP_CI_PASSWORD }}
+          repository-name: 'repo-debian'
+          repository-type: 'deb'
+          upload: 'false'
+          publish: 'true'
+      - name: Publish Debian packages
+        if: ${{ contains(inputs.os, 'ubuntu') }}
+        uses: PowerDNS/pdns/upload-to-pulp@meta
+        with:
+          pulp-api-url: ${{ secrets.PULP_URL }}
+          pulp-ci-username: ${{ secrets.PULP_CI_USERNAME }}
+          pulp-ci-password: ${{ secrets.PULP_CI_PASSWORD }}
+          repository-name: 'repo-ubuntu'
+          repository-type: 'deb'
+          upload: 'false'
+          publish: 'true'
       - id: check-finished
-        run: echo "upload-completed=yes" >> $GITHUB_OUTPUT
+        run: echo "completed=yes" >> $GITHUB_OUTPUT
 
   test-packages:
-    needs: [prepare, build, publish-packages]
+    needs: [prepare, build, upload-packages, publish-deb-packages]
     continue-on-error: true
     name: Test packages
     runs-on: ${{ matrix.runner-os }}
-    if: ${{ needs.publish-packages.outputs.check-finished == 'yes' }}
+    if: ${{ needs.upload-packages.outputs.check-finished == 'yes' && needs.publish-deb-packages.outputs.check-finished == 'yes' }}
     strategy:
       matrix:
         os: ${{fromJson(needs.prepare.outputs.oslist)}}
         runner-os: ${{ fromJson(needs.prepare.outputs.runnerlist )}}
       fail-fast: false
+    env:
+      PRODUCT: ${{ needs.build.outputs.product-name }}
+      PRODUCT_REPO_NAME: ${{ inputs.product == 'authoritative' && 'auth' || ( inputs.product == 'recursor' && 'rec' || 'dnsdist') }}
+      BINARY_NAME: ${{ inputs.product == 'authoritative' && 'pdns_server' || ( inputs.product == 'recursor' && 'pdns_recursor' || 'dnsdist') }}
+      VERSION: ${{ needs.build.outputs.version }}
+      SHORTVERSION: ${{ needs.build.outputs.shortversion }}
+      DEBIAN_FRONTEND: noninteractive
     steps:
       - uses: actions/checkout@v5
         with:
           fetch-depth: 1
-          submodules: recursive
-      - name: install pyinvoke and pulp
-        run: |
-          python3 -m venv ${GITHUB_WORKSPACE}/.venv
-          . ${GITHUB_WORKSPACE}/.venv/bin/activate && pip install -r ${GITHUB_WORKSPACE}/builder-support/requirements.txt
-      - name: Normalize product name
-        id: normalize-name
-        run: |
-          shortversion=$(echo ${{ needs.build.outputs.version }} | grep -qq master && echo master || echo ${{ needs.build.outputs.version }} | awk -F. '{print $1$2}')
-          if [ "x${{ inputs.product }}" = "xauthoritative" ]; then
-            echo "normalized-package-name=pdns" >> $GITHUB_OUTPUT
-            echo "normalized-product-name=auth-${shortversion}" >> $GITHUB_OUTPUT
-            echo "process-name=pdns_server" >> $GITHUB_OUTPUT
-          elif [ "x${{ inputs.product }}" = "xrecursor" ]; then
-            echo "normalized-package-name=pdns-recursor" >> $GITHUB_OUTPUT
-            echo "normalized-product-name=rec-${shortversion}" >> $GITHUB_OUTPUT
-            echo "process-name=pdns_recursor" >> $GITHUB_OUTPUT
-          else
-            echo "normalized-package-name=${{ inputs.product }}" >> $GITHUB_OUTPUT
-            echo "normalized-product-name=${{ inputs.product }}-${shortversion}" >> $GITHUB_OUTPUT
-            echo "process-name=dnsdist" >> $GITHUB_OUTPUT
-          fi
+          persist-credentials: false
+      - run: |
+          sudo apt update && sudo apt install -y python3-invoke
       - id: get-gpg-pubkey-url
         run: |
-          echo "gpg-pubkey-url=$(echo ${{ needs.build.outputs.version }} | grep -qq "master" && echo ${{ secrets.PULP_PDNS_GPG_PUBKEY_MASTER }} || echo ${{ secrets.PULP_PDNS_GPG_PUBKEY }} )" >> $GITHUB_OUTPUT
-      - run: ${{ env.INV_CMD }} test-install-package ${{ steps.normalize-name.outputs.normalized-product-name }} ${{ matrix.os }} ${{ secrets.PULP_CONTENT_URL }} ${{ steps.get-gpg-pubkey-url.outputs.gpg-pubkey-url }} ${{ steps.normalize-name.outputs.normalized-package-name }} ${{ needs.build.outputs.version }}
+          echo "gpg-pubkey-url=$(echo ${VERSION} | grep -qq "master" && echo ${{ secrets.PULP_PDNS_GPG_PUBKEY_MASTER }} || echo ${{ secrets.PULP_PDNS_GPG_PUBKEY }} )" >> $GITHUB_OUTPUT
+      - run: |
+          inv test-install-package ${PRODUCT_REPO_NAME}-${SHORTVERSION} ${{ matrix.os }} ${{ secrets.PULP_CONTENT_URL }} ${{ steps.get-gpg-pubkey-url.outputs.gpg-pubkey-url }} ${PRODUCT} ${VERSION}
       - name: check package version
-        run: docker run -t test-build-${{ steps.normalize-name.outputs.normalized-product-name }}-${{ matrix.os }}:latest ${{ steps.normalize-name.outputs.process-name }} --version | grep -qq ${{ needs.build.outputs.version }} && echo "[OK]" || exit 1
+        run: |
+          docker run -t test-build-${PRODUCT_REPO_NAME}-${SHORTVERSION}-${{ matrix.os }}:latest ${BINARY_NAME} --version | grep -qq ${VERSION} && echo "[OK]" || exit 1
index c4265877be9796ac1df03ae1c0ace86567328d29..1e99b0a5c5ac76c1b2c168455600a1452af46328 100644 (file)
--- a/tasks.py
+++ b/tasks.py
@@ -1301,155 +1301,6 @@ def ci_build_and_install_quiche(c, repo):
         c.run('cp /usr/lib/libquiche.so /opt/dnsdist/lib/libquiche.so')
         break
 
-pulp_cmd_prefix = " ".join([
-    "pulp",
-    f"--base-url {os.getenv('PULP_URL', '')}",
-    f"--username {os.getenv('PULP_CI_USERNAME', '')}",
-    f"--password {os.getenv('PULP_CI_PASSWORD', '')}"
-])
-
-def run_pulp_cmd(c, cmd):
-    res = c.run(f'{pulp_cmd_prefix} {cmd}')
-    if res.exited != 0:
-        raise UnexpectedExit(res)
-    return res.stdout
-
-@task
-def validate_pulp_credentials(c):
-    # Basic pulp command that require credentials to succeed
-    repo_name = os.getenv("PULP_REPO_NAME", '')
-    cmd = f'file repository show --repository {repo_name}'
-    run_pulp_cmd(c, cmd)
-
-@task
-def pulp_upload_file_packages_by_folder(c, source):
-    repo_name = os.getenv("PULP_REPO_NAME", '')
-    for root, dirs, files in os.walk(source):
-        for path in files:
-            file = os.path.join(root, path).split('/',1)[1]
-            # First upload file as an artifact
-            cmd = f"artifact upload --file {source}/{file} --chunk-size 500MB | jq -r '.sha256' | tr -d '\n'"
-            artifact_sha256 = run_pulp_cmd(c, cmd)
-            # Then create the content of type file
-            cmd = f'file content create --repository {repo_name} --relative-path {file} --sha256 {artifact_sha256}'
-            run_pulp_cmd(c, cmd)
-
-@task
-def pulp_create_rpm_publication(c, product, list_os_rel, list_arch):
-    max_push_attempts = 3
-    rpm_distros = ["centos", "el"]
-    for os_rel in json.loads(list_os_rel):
-        if not "el-" in os_rel:
-            break
-        release = os_rel.split('-')[1]
-        for arch in json.loads(list_arch):
-            for distro in rpm_distros:
-                repo_name = f"repo-{distro}-{release}-{arch}-{product}"
-                attempts = 0
-                while attempts < max_push_attempts:
-                    try:
-                        cmd = f'rpm publication create --repository {repo_name} --checksum-type sha256'
-                        run_pulp_cmd(c, cmd)
-                        break
-                    except UnexpectedExit:
-                        attempts += 1
-                        time.sleep(5)
-                        print(f'Next attempt: {attempts}')
-                        if attempts == max_push_attempts:
-                            raise Failure(f'Error creating rpm publication')
-
-@task
-def pulp_create_deb_publication(c):
-    max_push_attempts = 3
-    deb_distros = ["debian", "ubuntu"]
-    for distro in deb_distros:
-        repo_name = f"repo-{distro}"
-        attempts = 0
-        while attempts < max_push_attempts:
-            try:
-                cmd = f'deb publication create --repository {repo_name}'
-                run_pulp_cmd(c, cmd)
-                break
-            except UnexpectedExit:
-                attempts += 1
-                time.sleep(20)
-                print(f'Next attempt: {attempts}')
-                if attempts == max_push_attempts:
-                    raise Failure(f'Error creating deb publication')
-
-@task
-def pulp_upload_rpm_packages_by_folder(c, source, product):
-    rpm_distros = ["centos", "el"]
-    builds = os.listdir(source)
-
-    for build_folder in builds:
-        release = build_folder.split('.')[0].split('-')[1]
-        arch = build_folder.split('.')[1]
-        for distro in rpm_distros:
-            repo_name = f"repo-{distro}-{release}-{arch}-{product}"
-            for root, dirs, files in os.walk(f"{source}/{build_folder}"):
-                for path in files:
-                    file = os.path.join(root, path).split('/',1)[1]
-                    # Set chunk size to 500MB to avoid creating an "upload" instead of a file. Required for signing RPMs.
-                    cmd = f'rpm content -t package upload --file {source}/{file} --repository {repo_name} --no-publish --chunk-size 500MB'
-                    run_pulp_cmd(c, cmd)
-
-def get_pulp_repository_href(c, repo_name, repo_type):
-    cmd = f"{repo_type} repository show --name {repo_name} | jq -r '.pulp_href' | tr -d '\n'"
-    href = run_pulp_cmd(c, cmd)
-    return href
-
-def is_pulp_task_completed(c, task_href):
-    elapsed_time = 0
-    check_interval = 5
-    max_wait_time = 300
-
-    while elapsed_time < max_wait_time:
-        cmd = f"task show --href {task_href} | jq -r .state | tr -d '\n'"
-        task_state = run_pulp_cmd(c, cmd)
-        if task_state == "completed":
-            return True
-        time.sleep(check_interval)
-        elapsed_time += check_interval
-
-    return False
-
-@task
-def pulp_upload_deb_packages_by_folder(c, source, product):
-    builds = os.listdir(source)
-    upload_url = os.getenv('PULP_URL', '') + "/pulp/api/v3/content/deb/packages/"
-    headers = {"Content-Type": "application/json"}
-    auth = requests.auth.HTTPBasicAuth(os.getenv("PULP_CI_USERNAME", ""), os.getenv("PULP_CI_PASSWORD", ""))
-
-    for build_folder in builds:
-        distro = build_folder.split('-')[0]
-        distribution = f"{build_folder.split('-')[1]}-{product}"
-        repo_name = f"repo-{distro}"
-        repository_href = get_pulp_repository_href(c, repo_name, "deb")
-
-        for root, dirs, files in os.walk(source):
-            for path in files:
-                file = os.path.join(root, path).split('/',1)[1]
-                cmd = f"artifact upload --file {source}/{file} --chunk-size 500MB | jq -r '.pulp_href' | tr -d '\n'"
-                artifact_href = run_pulp_cmd(c, cmd)
-
-                package_data = {
-                    "repository": repository_href,
-                    "distribution": distribution,
-                    "component": "main",
-                    "artifact": artifact_href
-                }
-
-                try:
-                    res = requests.post(upload_url, auth=auth, headers=headers, json=package_data)
-                    res.raise_for_status()
-                except requests.exceptions.HTTPError as e:
-                    raise Failure(f'Error creating DEB upload: {e}')
-
-                task_href = res.json().get('task')
-                if not is_pulp_task_completed(c, task_href):
-                    raise Failure('Error uploading DEB packages into Pulp')
-
 @task
 def test_install_package(c, product_name, distro_release, content_url, gpgkey_url, package_name, package_version):
     distro, release = distro_release.split('-')[:2]