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 }}
- 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: |
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
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]