diff --git a/scripts/build-distro-release.sh b/scripts/build-distro-release.sh index b7350c0..d1f39f4 100644 --- a/scripts/build-distro-release.sh +++ b/scripts/build-distro-release.sh @@ -345,95 +345,118 @@ dsc_sha256="$(sha256sum "$dsc_path" | awk '{ print $1 }')" nginx_v_text="$metadata_dir/nginx-V.txt" nginx -V > "$nginx_v_text" 2>&1 +if [[ -n "$nginx_abi" ]]; then + deb_depends_json="$( + python3 -c 'import json, sys; print(json.dumps(sys.argv[1:]))' \ + "$nginx_abi" \ + "$nginx_binary_package (= $nginx_binary_version)" \ + "libc6" + )" +else + deb_depends_json="$( + python3 -c 'import json, sys; print(json.dumps(sys.argv[1:]))' \ + "$nginx_binary_package (= $nginx_binary_version)" \ + "libc6" + )" +fi + compatibility_json="$metadata_dir/compatibility.json" -jq -n \ - --slurpfile nginxBuild "$nginx_build_info" \ - --arg schema "1" \ - --arg module "$MODULE_NAME" \ - --arg debPackage "$DEB_PACKAGE_NAME" \ - --arg debVersion "$deb_version" \ - --arg releaseTag "$NEXT_TAG" \ - --arg releaseVersion "$NEXT_VERSION" \ - --arg previousTag "$LATEST_TAG" \ - --arg gitRef "$GITHUB_REF" \ - --arg gitSha "$GITHUB_SHA" \ - --arg distroImage "$DISTRO_IMAGE" \ - --arg dockerPlatform "$DOCKER_PLATFORM" \ - --arg targetArch "$TARGET_ARCH" \ - --arg osId "$distro_id" \ - --arg osVersion "$distro_version" \ - --arg osCodename "$distro_codename" \ - --arg debArch "$deb_arch" \ - --arg nginxBinaryPackage "$nginx_binary_package" \ - --arg nginxBinaryVersion "$nginx_binary_version" \ - --arg nginxSourcePackage "$source_package" \ - --arg nginxSourceVersion "$source_version" \ - --arg nginxAbi "$nginx_abi" \ - --arg modulesPath "$modules_path" \ - --arg dscPath "$(basename "$dsc_path")" \ - --arg dscSha256 "$dsc_sha256" \ - --arg moduleSha256 "$module_sha256" \ - --arg builtAt "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ - --arg artifactBase "$artifact_base" \ - --arg debFile "$deb_file" \ - --arg tarballFile "$tarball_file" \ - '{ - schema: ($schema | tonumber), - module: $module, - release: { - tag: $releaseTag, - version: $releaseVersion, - previous_tag: $previousTag, - git_ref: $gitRef, - git_sha: $gitSha - }, - target: { - os_id: $osId, - os_version: $osVersion, - os_codename: $osCodename, - architecture: $debArch, - requested_target: $targetArch, - docker_image: $distroImage, - docker_platform: $dockerPlatform - }, - nginx: { - binary_package: $nginxBinaryPackage, - binary_version: $nginxBinaryVersion, - source_package: $nginxSourcePackage, - source_version: $nginxSourceVersion, - abi: $nginxAbi, - modules_path: $modulesPath, - build: $nginxBuild[0] - }, - build: { - method: "distro-source-package", - dsc_file: $dscPath, - dsc_sha256: $dscSha256, - module_sha256: $moduleSha256, - built_at: $builtAt - }, - artifacts: { - base_name: $artifactBase, - deb_package: $debPackage, - deb_version: $debVersion, - deb_file: $debFile, - tarball_file: $tarballFile, - compatibility_file: ($artifactBase + ".compatibility.json") - }, - packaging: { - deb_depends: ( - if $nginxAbi == "" then - [($nginxBinaryPackage + " (= " + $nginxBinaryVersion + ")"), "libc6"] - else - [$nginxAbi, ($nginxBinaryPackage + " (= " + $nginxBinaryVersion + ")"), "libc6"] - end - ) - }, - validation: { - packaged_nginx_config_test: false, - packaged_nginx_endpoint_smoke: false - } - }' > "$compatibility_json" +COMPATIBILITY_JSON="$compatibility_json" \ +NGINX_BUILD_INFO="$nginx_build_info" \ +SCHEMA=1 \ +MODULE_NAME="$MODULE_NAME" \ +DEB_PACKAGE_NAME="$DEB_PACKAGE_NAME" \ +DEB_VERSION="$deb_version" \ +NEXT_TAG="$NEXT_TAG" \ +NEXT_VERSION="$NEXT_VERSION" \ +LATEST_TAG="$LATEST_TAG" \ +GITHUB_REF="$GITHUB_REF" \ +GITHUB_SHA="$GITHUB_SHA" \ +DISTRO_IMAGE="$DISTRO_IMAGE" \ +DOCKER_PLATFORM="$DOCKER_PLATFORM" \ +TARGET_ARCH="$TARGET_ARCH" \ +OS_ID="$distro_id" \ +OS_VERSION="$distro_version" \ +OS_CODENAME="$distro_codename" \ +DEB_ARCH="$deb_arch" \ +NGINX_BINARY_PACKAGE="$nginx_binary_package" \ +NGINX_BINARY_VERSION="$nginx_binary_version" \ +NGINX_SOURCE_PACKAGE="$source_package" \ +NGINX_SOURCE_VERSION="$source_version" \ +NGINX_ABI="$nginx_abi" \ +MODULES_PATH="$modules_path" \ +DSC_PATH="$(basename "$dsc_path")" \ +DSC_SHA256="$dsc_sha256" \ +MODULE_SHA256="$module_sha256" \ +BUILT_AT="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ +ARTIFACT_BASE="$artifact_base" \ +DEB_FILE="$deb_file" \ +TARBALL_FILE="$tarball_file" \ +DEB_DEPENDS_JSON="$deb_depends_json" \ +python3 - <<'PY' +import json +import os + +with open(os.environ["NGINX_BUILD_INFO"], "r", encoding="utf-8") as f: + nginx_build = json.load(f) + +artifact_base = os.environ["ARTIFACT_BASE"] +data = { + "schema": int(os.environ["SCHEMA"]), + "module": os.environ["MODULE_NAME"], + "release": { + "tag": os.environ["NEXT_TAG"], + "version": os.environ["NEXT_VERSION"], + "previous_tag": os.environ["LATEST_TAG"], + "git_ref": os.environ["GITHUB_REF"], + "git_sha": os.environ["GITHUB_SHA"], + }, + "target": { + "os_id": os.environ["OS_ID"], + "os_version": os.environ["OS_VERSION"], + "os_codename": os.environ["OS_CODENAME"], + "architecture": os.environ["DEB_ARCH"], + "requested_target": os.environ["TARGET_ARCH"], + "docker_image": os.environ["DISTRO_IMAGE"], + "docker_platform": os.environ["DOCKER_PLATFORM"], + }, + "nginx": { + "binary_package": os.environ["NGINX_BINARY_PACKAGE"], + "binary_version": os.environ["NGINX_BINARY_VERSION"], + "source_package": os.environ["NGINX_SOURCE_PACKAGE"], + "source_version": os.environ["NGINX_SOURCE_VERSION"], + "abi": os.environ["NGINX_ABI"], + "modules_path": os.environ["MODULES_PATH"], + "build": nginx_build, + }, + "build": { + "method": "distro-source-package", + "dsc_file": os.environ["DSC_PATH"], + "dsc_sha256": os.environ["DSC_SHA256"], + "module_sha256": os.environ["MODULE_SHA256"], + "built_at": os.environ["BUILT_AT"], + }, + "artifacts": { + "base_name": artifact_base, + "deb_package": os.environ["DEB_PACKAGE_NAME"], + "deb_version": os.environ["DEB_VERSION"], + "deb_file": os.environ["DEB_FILE"], + "tarball_file": os.environ["TARBALL_FILE"], + "compatibility_file": artifact_base + ".compatibility.json", + }, + "packaging": { + "deb_depends": json.loads(os.environ["DEB_DEPENDS_JSON"]), + }, + "validation": { + "packaged_nginx_config_test": False, + "packaged_nginx_endpoint_smoke": False, + }, +} + +with open(os.environ["COMPATIBILITY_JSON"], "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, sort_keys=True) + f.write("\n") +PY cat > "$doc_dir/INSTALL.md" < "$compatibility_json.tmp" -mv "$compatibility_json.tmp" "$compatibility_json" +COMPATIBILITY_JSON="$compatibility_json" \ +DEB_FILE="$deb_file" \ +VALIDATION_TIME="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ +python3 - <<'PY' +import json +import os + +path = os.environ["COMPATIBILITY_JSON"] +with open(path, "r", encoding="utf-8") as f: + data = json.load(f) + +data["artifacts"]["deb_file"] = os.environ["DEB_FILE"] +data["validation"]["packaged_nginx_config_test"] = True +data["validation"]["packaged_nginx_endpoint_smoke"] = True +data["validation"]["validated_at"] = os.environ["VALIDATION_TIME"] + +tmp = path + ".tmp" +with open(tmp, "w", encoding="utf-8") as f: + json.dump(data, f, indent=2, sort_keys=True) + f.write("\n") +os.replace(tmp, path) +PY dpkg-deb --build --root-owner-group "$package_root" "$deb_path" tar_root="$build_root/tar"