diff --git a/jjb/freebsd-src.yaml b/jjb/freebsd-src.yaml index c7c2c266..179ac87d 100644 --- a/jjb/freebsd-src.yaml +++ b/jjb/freebsd-src.yaml @@ -546,3 +546,19 @@ timeout-var: 'BUILD_TIMEOUT' fail: true type: absolute + +- project: + name: FreeBSD-reproducibility + target: amd64 + target_arch: + - amd64 + branch: + - main + testtype: + - locale + - parallel + - path + - timestamp + - uid + jobs: + - 'FreeBSD-{branch}-{target_arch}-reproducibility-{testtype}' diff --git a/jjb/template.yaml b/jjb/template.yaml index d3d475fb..25a9ce4c 100644 --- a/jjb/template.yaml +++ b/jjb/template.yaml @@ -916,3 +916,28 @@ timeout-var: 'BUILD_TIMEOUT' fail: true type: absolute + +- job-template: + name: 'FreeBSD-{branch}-{target_arch}-reproducibility-{testtype}' + defaults: global + node: jailer + scm: + - FreeBSD-src-use_git_commit + parameters: + - USE_GIT_COMMIT + builders: + - add-svn-revision-description + - checkout-scripts + - setup-jail + - execute-in-jail + publishers: + - clean-jail + - git-mail-notify-failure-mailinglist + - git-mail-notify-fixed-admin-only + wrappers: + - timestamps + - timeout: + timeout: 240 + timeout-var: 'BUILD_TIMEOUT' + fail: true + type: absolute diff --git a/jobs/FreeBSD-main-amd64-reproducibility-locale/build.sh b/jobs/FreeBSD-main-amd64-reproducibility-locale/build.sh new file mode 100644 index 00000000..e71ec9e5 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-locale/build.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -ex + +export TESTTYPE=locale +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible-pre.sh +export TARGET=amd64 +export TARGET_ARCH=amd64 + +echo $SOURCE_DATE_EPOCH +echo $SOURCE_DATE_EPOCH_BASE +cd /usr/src +build_world_kernel +export MAKEOBJDIRPREFIX=${WORKSPACE}/objtest +rm -fr ${MAKEOBJDIRPREFIX} +export LC_ALL=fr_FR.UTF-8 +build_world_kernel + +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible.sh diff --git a/jobs/FreeBSD-main-amd64-reproducibility-locale/jail.conf b/jobs/FreeBSD-main-amd64-reproducibility-locale/jail.conf new file mode 100644 index 00000000..0fe63d45 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-locale/jail.conf @@ -0,0 +1,4 @@ +TARGET=amd64 +TARGET_ARCH=amd64 +WITH_32BIT=0 +OSRELEASE=14.2-RELEASE diff --git a/jobs/FreeBSD-main-amd64-reproducibility-locale/main.conf b/jobs/FreeBSD-main-amd64-reproducibility-locale/main.conf new file mode 100644 index 00000000..89a19a82 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-locale/main.conf @@ -0,0 +1,2 @@ +NO_CLEAN=yes +NO_ROOT=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-locale/make.conf b/jobs/FreeBSD-main-amd64-reproducibility-locale/make.conf new file mode 100644 index 00000000..5dcdfd25 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-locale/make.conf @@ -0,0 +1 @@ +NO_CLEAN=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-locale/pkg-list b/jobs/FreeBSD-main-amd64-reproducibility-locale/pkg-list new file mode 100644 index 00000000..37402f6b --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-locale/pkg-list @@ -0,0 +1 @@ +sysutils/py-diffoscope diff --git a/jobs/FreeBSD-main-amd64-reproducibility-locale/src.conf b/jobs/FreeBSD-main-amd64-reproducibility-locale/src.conf new file mode 100644 index 00000000..4be535fc --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-locale/src.conf @@ -0,0 +1 @@ +WITH_REPRODUCIBLE_BUILD=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-parallel/build.sh b/jobs/FreeBSD-main-amd64-reproducibility-parallel/build.sh new file mode 100644 index 00000000..080d21ed --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-parallel/build.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -ex + +export TESTTYPE=parallel +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible-pre.sh +export TARGET=amd64 +export TARGET_ARCH=amd64 + +echo $SOURCE_DATE_EPOCH +echo $SOURCE_DATE_EPOCH_BASE +cd /usr/src +build_world_kernel +export MAKEOBJDIRPREFIX=${WORKSPACE}/objtest +rm -fr ${MAKEOBJDIRPREFIX} +export JFLAG=1 +build_world_kernel + +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible.sh diff --git a/jobs/FreeBSD-main-amd64-reproducibility-parallel/jail.conf b/jobs/FreeBSD-main-amd64-reproducibility-parallel/jail.conf new file mode 100644 index 00000000..0fe63d45 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-parallel/jail.conf @@ -0,0 +1,4 @@ +TARGET=amd64 +TARGET_ARCH=amd64 +WITH_32BIT=0 +OSRELEASE=14.2-RELEASE diff --git a/jobs/FreeBSD-main-amd64-reproducibility-parallel/make.conf b/jobs/FreeBSD-main-amd64-reproducibility-parallel/make.conf new file mode 100644 index 00000000..5dcdfd25 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-parallel/make.conf @@ -0,0 +1 @@ +NO_CLEAN=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-parallel/pkg-list b/jobs/FreeBSD-main-amd64-reproducibility-parallel/pkg-list new file mode 100644 index 00000000..37402f6b --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-parallel/pkg-list @@ -0,0 +1 @@ +sysutils/py-diffoscope diff --git a/jobs/FreeBSD-main-amd64-reproducibility-parallel/src.conf b/jobs/FreeBSD-main-amd64-reproducibility-parallel/src.conf new file mode 100644 index 00000000..4be535fc --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-parallel/src.conf @@ -0,0 +1 @@ +WITH_REPRODUCIBLE_BUILD=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-path/build.sh b/jobs/FreeBSD-main-amd64-reproducibility-path/build.sh new file mode 100644 index 00000000..1ae200c2 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-path/build.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +set -ex + +export TESTTYPE=path +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible-pre.sh +export TARGET=amd64 +export TARGET_ARCH=amd64 + +echo $SOURCE_DATE_EPOCH +echo $SOURCE_DATE_EPOCH_BASE +cp -Rp /usr/src ${WORKSPACE}/src1 +cp -Rp /usr/src ${WORKSPACE}/src2 +cd ${WORKSPACE}/src1 +build_world_kernel +export MAKEOBJDIRPREFIX=${WORKSPACE}/objtest +rm -fr ${MAKEOBJDIRPREFIX} +cd ${WORKSPACE}/src2 +build_world_kernel + +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible.sh diff --git a/jobs/FreeBSD-main-amd64-reproducibility-path/jail.conf b/jobs/FreeBSD-main-amd64-reproducibility-path/jail.conf new file mode 100644 index 00000000..0fe63d45 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-path/jail.conf @@ -0,0 +1,4 @@ +TARGET=amd64 +TARGET_ARCH=amd64 +WITH_32BIT=0 +OSRELEASE=14.2-RELEASE diff --git a/jobs/FreeBSD-main-amd64-reproducibility-path/make.conf b/jobs/FreeBSD-main-amd64-reproducibility-path/make.conf new file mode 100644 index 00000000..32e5d474 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-path/make.conf @@ -0,0 +1,4 @@ +NO_CLEAN=yes +CFLAGS+="-ffile-prefix-map=$(pwd)=/usr/src" +CXXFLAGS+="-ffile-prefix-map=$(pwd)=/usr/src" +LDFLAGS+="-ffile-prefix-map=$(pwd)=/usr/src" diff --git a/jobs/FreeBSD-main-amd64-reproducibility-path/pkg-list b/jobs/FreeBSD-main-amd64-reproducibility-path/pkg-list new file mode 100644 index 00000000..37402f6b --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-path/pkg-list @@ -0,0 +1 @@ +sysutils/py-diffoscope diff --git a/jobs/FreeBSD-main-amd64-reproducibility-path/src.conf b/jobs/FreeBSD-main-amd64-reproducibility-path/src.conf new file mode 100644 index 00000000..4be535fc --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-path/src.conf @@ -0,0 +1 @@ +WITH_REPRODUCIBLE_BUILD=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-timestamp/build.sh b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/build.sh new file mode 100644 index 00000000..c6d1d789 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/build.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +set -ex + +export TESTTYPE=timestamp +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible-pre.sh +export TARGET=amd64 +export TARGET_ARCH=amd64 + +echo $SOURCE_DATE_EPOCH +echo $SOURCE_DATE_EPOCH_BASE +cd /usr/src +build_world_kernel +export MAKEOBJDIRPREFIX=${WORKSPACE}/objtest +rm -fr ${MAKEOBJDIRPREFIX} +# One year from today's date at 00:00:00 UTC +export SOURCE_DATE_EPOCH=$(date -u -j -v+1y -f "%Y-%m-%d %H:%M:%S" "$(date -u +%Y-%m-%d) 00:00:00" +%s) +echo $SOURCE_DATE_EPOCH +build_world_kernel + +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible.sh diff --git a/jobs/FreeBSD-main-amd64-reproducibility-timestamp/jail.conf b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/jail.conf new file mode 100644 index 00000000..0fe63d45 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/jail.conf @@ -0,0 +1,4 @@ +TARGET=amd64 +TARGET_ARCH=amd64 +WITH_32BIT=0 +OSRELEASE=14.2-RELEASE diff --git a/jobs/FreeBSD-main-amd64-reproducibility-timestamp/make.conf b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/make.conf new file mode 100644 index 00000000..5dcdfd25 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/make.conf @@ -0,0 +1 @@ +NO_CLEAN=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-timestamp/pkg-list b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/pkg-list new file mode 100644 index 00000000..37402f6b --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/pkg-list @@ -0,0 +1 @@ +sysutils/py-diffoscope diff --git a/jobs/FreeBSD-main-amd64-reproducibility-timestamp/src.conf b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/src.conf new file mode 100644 index 00000000..4be535fc --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-timestamp/src.conf @@ -0,0 +1 @@ +WITH_REPRODUCIBLE_BUILD=yes diff --git a/jobs/FreeBSD-main-amd64-reproducibility-uid/build.sh b/jobs/FreeBSD-main-amd64-reproducibility-uid/build.sh new file mode 100644 index 00000000..9894396e --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-uid/build.sh @@ -0,0 +1,44 @@ +#!/bin/sh + +set -ex + +export TESTTYPE=uid +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible-pre.sh +export TARGET=amd64 +export TARGET_ARCH=amd64 + +echo $SOURCE_DATE_EPOCH +echo $SOURCE_DATE_EPOCH_BASE +cd /usr/src +sudo -u root -E make -j ${JFLAG} \ + buildworld \ + TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH} \ + ${CROSS_TOOLCHAIN_PARAM} \ + __MAKE_CONF=${MAKECONF} \ + SRCCONF=${SRCCONF} +sudo -u root -E make -j ${JFLAG} -DNO_CLEAN -DNO_ROOT \ + buildkernel \ + TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH} \ + ${CROSS_TOOLCHAIN_PARAM} \ + __MAKE_CONF=${MAKECONF} \ + SRCCONF=${SRCCONF} +export MAKEOBJDIRPREFIX=${WORKSPACE}/objtest +rm -fr ${MAKEOBJDIRPREFIX} +sudo -u nobody -E make -j ${JFLAG} \ + buildworld \ + TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH} \ + ${CROSS_TOOLCHAIN_PARAM} \ + __MAKE_CONF=${MAKECONF} \ + SRCCONF=${SRCCONF} +sudo -u nobody -E make -j ${JFLAG} \ + buildkernel \ + TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH} \ + ${CROSS_TOOLCHAIN_PARAM} \ + __MAKE_CONF=${MAKECONF} \ + SRCCONF=${SRCCONF} + +. ${WORKSPACE}/freebsd-ci/scripts/build/build-reproducible.sh diff --git a/jobs/FreeBSD-main-amd64-reproducibility-uid/jail.conf b/jobs/FreeBSD-main-amd64-reproducibility-uid/jail.conf new file mode 100644 index 00000000..0fe63d45 --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-uid/jail.conf @@ -0,0 +1,4 @@ +TARGET=amd64 +TARGET_ARCH=amd64 +WITH_32BIT=0 +OSRELEASE=14.2-RELEASE diff --git a/jobs/FreeBSD-main-amd64-reproducibility-uid/pkg-list b/jobs/FreeBSD-main-amd64-reproducibility-uid/pkg-list new file mode 100644 index 00000000..37402f6b --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-uid/pkg-list @@ -0,0 +1 @@ +sysutils/py-diffoscope diff --git a/jobs/FreeBSD-main-amd64-reproducibility-uid/src.conf b/jobs/FreeBSD-main-amd64-reproducibility-uid/src.conf new file mode 100644 index 00000000..4be535fc --- /dev/null +++ b/jobs/FreeBSD-main-amd64-reproducibility-uid/src.conf @@ -0,0 +1 @@ +WITH_REPRODUCIBLE_BUILD=yes diff --git a/scripts/build/build-reproducible-pre.sh b/scripts/build/build-reproducible-pre.sh new file mode 100644 index 00000000..eeb70789 --- /dev/null +++ b/scripts/build/build-reproducible-pre.sh @@ -0,0 +1,39 @@ +if [ -f "${WORKSPACE}/$(dirname "$0")/src.conf" ]; then + export SRCCONF="${WORKSPACE}/$(dirname "$0")/src.conf" +else + export SRCCONF="/dev/null" +fi +if [ -f "${WORKSPACE}/$(dirname "$0")/make.conf" ]; then + export MAKECONF="${WORKSPACE}/$(dirname "$0")/make.conf" +else + export MAKECONF="/dev/null" +fi +export JFLAG=${BUILDER_JFLAG} +export ARTIFACT=${WORKSPACE}/diff.html +export ARTIFACT_DEST=artifact/reproducibility/${FBSD_BRANCH}/${TARGET}/${TARGET_ARCH}/${GIT_COMMIT}-${TESTTYPE}.html +# Set SOURCE_DATE_EPOCH to today at 00:00:00 UTC +export SOURCE_DATE_EPOCH=$(date -u -j -f "%Y-%m-%d %H:%M:%S" "$(date -u +%Y-%m-%d) 00:00:00" +%s) +export SOURCE_DATE_EPOCH_BASE=${SOURCE_DATE_EPOCH} +if [ -n "${CROSS_TOOLCHAIN}" ]; then + CROSS_TOOLCHAIN_PARAM=CROSS_TOOLCHAIN=${CROSS_TOOLCHAIN} + export CROSS_TOOLCHAIN_PARAM +fi +export MAKEOBJDIRPREFIX=${WORKSPACE}/obj +rm -fr ${MAKEOBJDIRPREFIX} + +build_world_kernel() { +make -j ${JFLAG} \ + buildworld \ + TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH} \ + ${CROSS_TOOLCHAIN_PARAM} \ + __MAKE_CONF=${MAKECONF} \ + SRCCONF=${SRCCONF} +make -j ${JFLAG} \ + buildkernel \ + TARGET=${TARGET} \ + TARGET_ARCH=${TARGET_ARCH} \ + ${CROSS_TOOLCHAIN_PARAM} \ + __MAKE_CONF=${MAKECONF} \ + SRCCONF=${SRCCONF} +} diff --git a/scripts/build/build-reproducible.sh b/scripts/build/build-reproducible.sh new file mode 100644 index 00000000..ed6db592 --- /dev/null +++ b/scripts/build/build-reproducible.sh @@ -0,0 +1,8 @@ +diffoscope --html ${WORKSPACE}/diff.html ${WORKSPACE}/obj ${WORKSPACE}/objtest +if [ -f "${WORKSPACE}/diff.html" ]; then + sudo mkdir -p ${ARTIFACT_DEST} + mv ${ARTIFACT} ${ARTIFACT_DEST} + exit 1 +else + exit 0 +fi