run: mkdir -p ~/.ccache
working-directory: .
- name: let GitHub cache our ccache data
- uses: actions/cache@v4
+ uses: actions/cache@v5
with:
path: ~/.ccache
key: ${{ inputs.cache-key-base }}-${{ steps.get-stamp.outputs.stamp }}
run:
working-directory: ./pdns-${{ env.BUILDER_VERSION }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
mkdir -p /opt/pdns-auth/sbin; mv /opt/pdns-auth/bin/pdns_server /opt/pdns-auth/sbin/
- if: ${{ matrix.builder == 'meson' }}
name: Store the binaries
- uses: actions/upload-artifact@v5 # this takes 30 seconds, maybe we want to tar
+ uses: actions/upload-artifact@v7 # this takes 30 seconds, maybe we want to tar
with:
name: pdns-auth-${{ matrix.builder}}-${{ env.normalized-branch-name }}
path: /opt/pdns-auth
run:
working-directory: ./pdns/recursordist/pdns-recursor-${{ env.BUILDER_VERSION }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
if: ${{ matrix.builder == 'meson' }}
- if: ${{ matrix.builder == 'meson' }}
name: Store the binaries
- uses: actions/upload-artifact@v5 # this takes 30 seconds, maybe we want to tar
+ uses: actions/upload-artifact@v7 # this takes 30 seconds, maybe we want to tar
with:
name: pdns-recursor-${{ matrix.features }}-${{ matrix.sanitizers }}-${{ matrix.builder}}-${{ env.normalized-branch-name }}
path: /opt/pdns-recursor
run:
working-directory: ./pdns/dnsdistdist/dnsdist-${{ env.BUILDER_VERSION }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
for i in $(find . -maxdepth 1 -type f -executable); do cp ${i} /opt/dnsdist/bin/; done
- name: Store the binaries
if: ${{ matrix.builder == 'meson' }}
- uses: actions/upload-artifact@v5 # this takes 30 seconds, maybe we want to tar
+ uses: actions/upload-artifact@v7 # this takes 30 seconds, maybe we want to tar
with:
name: dnsdist-${{ matrix.features }}-${{ matrix.sanitizers }}-${{ matrix.builder}}${{ matrix.architecture_suffix }}-${{ env.normalized-branch-name }}
path: /opt/dnsdist
options: >-
--restart always
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
uses: ./.github/actions/problem-matchers
- uses: ./.github/actions/normalize-branch-name
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: pdns-auth-meson-${{ env.normalized-branch-name }}
path: /opt/pdns-auth
options: >-
--restart always
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
uses: ./.github/actions/problem-matchers
- uses: ./.github/actions/normalize-branch-name
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: pdns-auth-meson-${{ env.normalized-branch-name }}
path: /opt/pdns-auth
ASAN_OPTIONS: detect_leaks=0
options: --sysctl net.ipv6.conf.all.disable_ipv6=0
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
uses: ./.github/actions/problem-matchers
- uses: ./.github/actions/normalize-branch-name
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: pdns-auth-meson-${{ env.normalized-branch-name }}
path: /opt/pdns-auth
TSAN_OPTIONS: "halt_on_error=1:suppressions=${{ env.REPO_HOME }}/pdns/recursordist/recursor-tsan.supp"
options: --sysctl net.ipv6.conf.all.disable_ipv6=0
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
uses: ./.github/actions/problem-matchers
- uses: ./.github/actions/normalize-branch-name
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: pdns-recursor-full-${{ matrix.sanitizers }}-meson-${{ env.normalized-branch-name }}
path: /opt/pdns-recursor
options: --sysctl net.ipv6.conf.all.disable_ipv6=0
steps:
# - uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
- name: add problem matchers
uses: ./.github/actions/problem-matchers
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: pdns-recursor-full-${{ matrix.sanitizers }}-meson-${{ env.normalized-branch-name }}
path: /opt/pdns-recursor
TSAN_OPTIONS: "halt_on_error=1:suppressions=${{ env.REPO_HOME }}/pdns/recursordist/recursor-tsan.supp"
options: --sysctl net.ipv6.conf.all.disable_ipv6=0
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
uses: ./.github/actions/problem-matchers
- uses: ./.github/actions/normalize-branch-name
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: pdns-recursor-full-${{ matrix.sanitizers }}-meson-${{ env.normalized-branch-name }}
path: /opt/pdns-recursor
shards: [1024]
IPv6: [0, 1]
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
uses: ./.github/actions/problem-matchers
- uses: ./.github/actions/normalize-branch-name
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: pdns-recursor-full-${{ matrix.sanitizers }}-meson-${{ env.normalized-branch-name }}
path: /opt/pdns-recursor
COVERAGE: no
options: --sysctl net.ipv6.conf.all.disable_ipv6=0 --privileged
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
uses: ./.github/actions/problem-matchers
- uses: ./.github/actions/normalize-branch-name
- name: Fetch the binaries
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
name: dnsdist-full-${{ matrix.sanitizers }}-meson-${{ env.normalized-branch-name }}
path: /opt/dnsdist
image: "${{ needs.get-runner-container-image.outputs.id }}:${{ needs.get-runner-container-image.outputs.tag }}"
options: --sysctl net.ipv6.conf.all.disable_ipv6=0
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
run: "sudo apt-get update && sudo apt-get install jq jc"
- name: Fail job if any of the previous jobs failed
run: "for i in `echo ${NEEDS} | jq -r '.[].result'`; do if [[ $i == 'failure' ]]; then echo ${NEEDS}; exit 1; fi; done;"
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
permissions:
contents: read
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
permissions:
contents: read
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
ref: ${{ inputs.ref }}
persist-credentials: false
- name: Set up Docker Buildx for multi-platform builds
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@v4
- name: Set up QEMU
- uses: docker/setup-qemu-action@v3
+ uses: docker/setup-qemu-action@v4
- name: Login to Docker Hub
if: ${{ inputs.push }}
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker image metadata
id: meta
- uses: docker/metadata-action@v5
+ uses: docker/metadata-action@v6
with:
images: ${{ secrets.DOCKERHUB_ORGANIZATION_NAME || 'powerdns' }}/${{ inputs.image-name }}
- name: Build and load powerdns product images
id: build-image
- uses: docker/build-push-action@v6
+ uses: docker/build-push-action@v7
with:
context: .
file: Dockerfile-${{ inputs.product }}
outputs: type=image,push-by-digest=true,name-canonical=true
- name: Update repo description
if: ${{ inputs.push }}
- uses: peter-evans/dockerhub-description@v4
+ uses: peter-evans/dockerhub-description@v5
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# generate suffix for digest file
echo "PLATFORM_PAIR=${ARCH//\//-}" >> $GITHUB_ENV
- name: Upload digest
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v7
with:
name: digests-${{ inputs.product }}-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/*
IMAGE_NAME: ${{ secrets.DOCKERHUB_ORGANIZATION_NAME }}/${{ inputs.image-name }}
steps:
- name: Install cosign
- uses: sigstore/cosign-installer@v3.7.0
+ uses: sigstore/cosign-installer@v4.1.0
- name: Download digests
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
path: ${{ runner.temp }}/digests
pattern: digests-${{ inputs.product }}-*
merge-multiple: true
- name: Login to Docker Hub
if: ${{ inputs.push }}
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@v4
- name: Docker meta
id: meta
- uses: docker/metadata-action@v5
+ uses: docker/metadata-action@v6
with:
images: ${{ env.IMAGE_NAME }}
tags: ${{ inputs.image-tags }}
# but, as this whole workflow needs at least 30 minutes to run, I prefer spending a few seconds here
# so that the command remains readable, because jo is simpler to use.
- run: sudo apt-get update && sudo apt-get -y install jo
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
submodules: recursive
PRODUCT: ${{ inputs.product }}
OS: ${{ matrix.os }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 0 # for correct version numbers
submodules: recursive
TARGET_ARCH: ${{ steps.getarch.outputs.target-arch }}
run: for f in $(ls ./built_pkgs/*/*/*-${OS}.tar.bz2 | sed 's/\.tar.bz2$//'); do mv $f.tar.bz2 $f-${TARGET_ARCH}.tar.bz2; done
- name: Upload packages as GH artifacts
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v7
with:
name: ${{ inputs.product }}-${{ matrix.os }}-${{ steps.getversion.outputs.version }}-${{ steps.getarch.outputs.target-arch }}
path: built_pkgs/
actions: read # To read the workflow path.
id-token: write # To sign the provenance.
contents: write # To be able to upload assets as release artifacts
- uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
+ uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
with:
base64-subjects: "${{ needs.build.outputs[format('pkghashes-{0}-{1}', matrix.os, matrix.architecture)] }}"
upload-assets: false
actions: read # To read the workflow path.
id-token: write # To sign the provenance.
contents: write # To be able to upload assets as release artifacts
- uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
+ uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
with:
base64-subjects: "${{ needs.build.outputs.srchashes }}"
upload-assets: false
steps:
- name: Download source tarball provenance for ${{ inputs.product }} (${{ inputs.ref }})
id: download-src-provenance
- uses: actions/download-artifact@v4 # be careful, this needs to match what https://github.com/slsa-framework/slsa-github-generator is using
+ uses: actions/download-artifact@v8
with:
name: "${{ inputs.product }}-${{ needs.build.outputs.version }}-src.intoto.jsonl"
- name: Download provenance for ${{ inputs.product }} (${{ inputs.ref }}) for ${{ matrix.os }}
id: download-provenance
- uses: actions/download-artifact@v4 # be careful, this needs to match what https://github.com/slsa-framework/slsa-github-generator is using
+ uses: actions/download-artifact@v8
with:
name: "${{ inputs.product }}-${{ needs.build.outputs.version }}-${{ matrix.os }}-${{ matrix.architecture }}.intoto.jsonl"
- name: Upload provenance artifacts to downloads.powerdns.com
outputs:
check-finished: ${{ steps.check-finished.outputs.completed }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
- name: Download packages
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
pattern: "${{ inputs.product }}-${{ matrix.os }}-${{ needs.build.outputs.version }}-${{ matrix.architecture }}"
path: "${{ runner.temp }}/files"
PRODUCT: ${{ needs.build.outputs.product-name }}
VERSION: ${{ needs.build.outputs.version }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
- name: Download packages
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
pattern: "${{ inputs.product }}-${{ matrix.os }}-${{ env.VERSION }}-${{ matrix.architecture }}"
path: "${{ runner.temp }}/files"
PRODUCT: ${{ needs.build.outputs.product-name }}
VERSION: ${{ needs.build.outputs.version }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
- name: Download provenance files
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
pattern: "${{ inputs.product }}-${{ env.VERSION }}-*.intoto.jsonl"
path: "${{ runner.temp }}/files"
run: |
echo "OS=$(echo ${OSLIST} | awk '{print $1}')" >> $GITHUB_ENV
- name: Download a package artifact
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
pattern: "${{ inputs.product }}-${{ env.OS }}-${{ env.VERSION }}-x86_64"
path: "${{ runner.temp }}/files"
outputs:
check-finished: ${{ steps.check-finished.outputs.completed }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
SHORTVERSION: ${{ needs.build.outputs.shortversion }}
DEBIAN_FRONTEND: noninteractive
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
runner-os: ${{ fromJson(needs.prepare.outputs.runnerlist )}}
fail-fast: false
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 0 # for correct version numbers
submodules: recursive
echo "target-arch=$(uname -m)" >> $GITHUB_OUTPUT
id: getarch
- name: Upload packages
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v7
with:
name: ${{ matrix.product }}-${{ matrix.os }}-${{ steps.getversion.outputs.version }}-${{ steps.getarch.outputs.target-arch }}
path: built_pkgs/
runs-on: ubuntu-latest
name: Rust dependencies check
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
submodules: recursive
steps:
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
if: ${{ github.event_name == 'pull_request' }}
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 2
persist-credentials: false
if: ${{ github.event_name == 'pull_request' }}
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false
UNIT_TESTS: no
steps:
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
REPO_HOME: ${{ github.workspace }}
steps:
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
CARGO_USE_DEV: 1
steps:
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
- rel/rec-5.1.x
fail-fast: false
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 1
submodules: recursive
pdns_version: ${{ steps.get-version.outputs.pdns_version }}
steps:
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/setup-python@v6
working-directory: ./docs/_build
- run: tar cf auth-html-docs.tar auth-html-docs
working-directory: ./docs/_build
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v7
with:
name: authoritative-html-docs-${{steps.get-version.outputs.pdns_version}}
path: ./docs/_build/auth-html-docs.tar
- run: inv ci-docs-build-pdf
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v7
with:
name: PowerDNS-Authoritative-${{steps.get-version.outputs.pdns_version}}.pdf
path: ./docs/_build/latex/PowerDNS-Authoritative.pdf
working-directory: ./pdns/recursordist/docs/_build
- run: tar cf rec-html-docs.tar rec-html-docs
working-directory: ./pdns/recursordist/docs/_build
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v7
with:
name: recursor-html-docs-${{steps.get-version.outputs.pdns_version}}
path: ./pdns/recursordist/docs/_build/rec-html-docs.tar
- run: inv ci-docs-build-pdf
working-directory: ./pdns/recursordist
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v7
with:
name: PowerDNS-Recursor-${{steps.get-version.outputs.pdns_version}}.pdf
path: ./pdns/recursordist/docs/_build/latex/PowerDNS-Recursor.pdf
working-directory: ./pdns/dnsdistdist/docs/_build
- run: tar cf dnsdist-html-docs.tar dnsdist-html-docs
working-directory: ./pdns/dnsdistdist/docs/_build
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v7
with:
name: dnsdist-html-docs-${{steps.get-version.outputs.pdns_version}}
path: ./pdns/dnsdistdist/docs/_build/dnsdist-html-docs.tar
- run: inv ci-docs-build-pdf
working-directory: ./pdns/dnsdistdist
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v7
with:
name: dnsdist-${{steps.get-version.outputs.pdns_version}}.pdf
path: ./pdns/dnsdistdist/docs/_build/latex/dnsdist.pdf
- name: Build website
run: |
tar cf website.tar website
- - uses: actions/upload-artifact@v5
+ - uses: actions/upload-artifact@v7
with:
name: website-${{steps.get-version.outputs.pdns_version}}
path: website.tar
exit 1
fi
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- run: build-scripts/gh-actions-setup-inv-no-dist-upgrade
- - uses: actions/download-artifact@v6
+ - uses: actions/download-artifact@v8
with:
path: artifacts
- id: setup-ssh
echo "Error: The following secrets/variables are missing: ${missing_secrets[*]}"
exit 1
fi
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- - uses: aws-actions/configure-aws-credentials@v4
+ - uses: aws-actions/configure-aws-credentials@v6
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
region = $AWS_REGION
EOF
- name: Download artifacts
- uses: actions/download-artifact@v6
+ uses: actions/download-artifact@v8
with:
path: artifacts
- name: Publish to AWS
# on an ubuntu-24.04 VM
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
Fuzzing:
runs-on: ubuntu-24.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
fuzz-seconds: 600
dry-run: false
- name: Upload Crash
- uses: actions/upload-artifact@v5
+ uses: actions/upload-artifact@v7
if: failure()
with:
name: artifacts
if: ${{ vars.SCHEDULED_MISC_DAILIES }}
runs-on: ubuntu-22.04
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
IPv6: [0, 1]
max-parallel: 1
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
runs-on: ubuntu-24.04
steps:
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
fetch-depth: 5
submodules: recursive
outputs:
req-files: ${{ steps.get-list-requirements.outputs.files }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- name: Get all requirements.txt files and export them as outputs
steps:
- run: echo "${REQUIREMENTS_FILE}"
- uses: PowerDNS/pdns/set-ubuntu-mirror@meta
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v6
with:
persist-credentials: false
- name: add problem matchers