daml/release/util.bzl
Andreas Herrmann 5d7981f84d
Reproducible SDK release tarball (#5213)
* Make SDK release tarball reproducible

Without these changes multiple factors contribute to a different SDK
release tarball on each rebuild:
* Without `--sort=name` the order of files in the archive is determined
  by the OS and essentially random.
* Without the `--owner/group/mtime` flags the archive contains metadata
  that depends on the environment.
* Without `-n` `gzip` would write a timestamp into the produced
  artifact.

CHANGELOG_BEGIN
CHANGELOG_END

* sdk-release-tarball: zip is unused

Co-authored-by: Andreas Herrmann <andreas.herrmann@tweag.io>
2020-03-26 17:37:36 +01:00

80 lines
3.7 KiB
Python

# Copyright (c) 2020 The DAML Authors. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
def sdk_tarball(name, version):
native.genrule(
name = name,
srcs = [
":sdk-config.yaml.tmpl",
":install.sh",
":install.bat",
"//ledger/sandbox:src/main/resources/logback.xml",
"//navigator/backend:src/main/resources/logback.xml",
"//extractor:src/main/resources/logback.xml",
"//ledger-service/http-json:release/json-api-logback.xml",
"//language-support/java/codegen:src/main/resources/logback.xml",
"//triggers/runner:src/main/resources/logback.xml",
"//daml-script/runner:src/main/resources/logback.xml",
"//:NOTICES",
"//daml-assistant:daml-dist",
"//compiler/damlc:damlc-dist",
"//compiler/daml-extension:vsix",
"//daml-assistant/daml-helper:daml-helper-dist",
"//language-support/ts/codegen:daml2ts-dist",
"//templates:templates-tarball.tar.gz",
"//triggers/daml:daml-trigger-dars",
"//daml-script/daml:daml-script-dars",
"//daml-assistant/daml-sdk:sdk_deploy.jar",
],
outs = ["{}.tar.gz".format(name)],
cmd = """
# damlc
VERSION={version}
OUT=sdk-$$VERSION
mkdir -p $$OUT
cp $(location //:NOTICES) $$OUT/NOTICES
cp $(location :install.sh) $$OUT/install.sh
cp $(location :install.bat) $$OUT/install.bat
cp $(location :sdk-config.yaml.tmpl) $$OUT/sdk-config.yaml
sed -i "s/__VERSION__/$$VERSION/" $$OUT/sdk-config.yaml
mkdir -p $$OUT/daml
tar xf $(location //daml-assistant:daml-dist) --strip-components=1 -C $$OUT/daml
mkdir -p $$OUT/damlc
tar xf $(location //compiler/damlc:damlc-dist) --strip-components=1 -C $$OUT/damlc
mkdir -p $$OUT/daml-libs
cp -t $$OUT/daml-libs $(locations //triggers/daml:daml-trigger-dars)
cp -t $$OUT/daml-libs $(locations //daml-script/daml:daml-script-dars)
mkdir -p $$OUT/daml-helper
tar xf $(location //daml-assistant/daml-helper:daml-helper-dist) --strip-components=1 -C $$OUT/daml-helper
mkdir -p $$OUT/daml2ts
tar xf $(location //language-support/ts/codegen:daml2ts-dist) --strip-components=1 -C $$OUT/daml2ts
mkdir -p $$OUT/studio
cp $(location //compiler/daml-extension:vsix) $$OUT/studio/daml-bundled.vsix
mkdir -p $$OUT/templates
tar xf $(location //templates:templates-tarball.tar.gz) --strip-components=1 -C $$OUT/templates
mkdir -p $$OUT/daml-sdk
cp $(location //daml-assistant/daml-sdk:sdk_deploy.jar) $$OUT/daml-sdk/daml-sdk.jar
cp -L $(location //ledger-service/http-json:release/json-api-logback.xml) $$OUT/daml-sdk/
cp -L $(location //ledger/sandbox:src/main/resources/logback.xml) $$OUT/daml-sdk/sandbox-logback.xml
cp -L $(location //navigator/backend:src/main/resources/logback.xml) $$OUT/daml-sdk/navigator-logback.xml
cp -L $(location //extractor:src/main/resources/logback.xml) $$OUT/daml-sdk/extractor-logback.xml
cp -L $(location //language-support/java/codegen:src/main/resources/logback.xml) $$OUT/daml-sdk/codegen-logback.xml
cp -L $(location //triggers/runner:src/main/resources/logback.xml) $$OUT/daml-sdk/trigger-logback.xml
cp -L $(location //daml-script/runner:src/main/resources/logback.xml) $$OUT/daml-sdk/script-logback.xml
tar c --format=ustar --sort=name --owner=root:0 --group=root:0 --mtime=0 $$OUT | gzip -n > $@
""".format(version = version),
visibility = ["//visibility:public"],
)