summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-05-26ci: Support secure binary signing on protected pipelines (#30753)Scott Wittenburg13-172/+534
This PR supports the creation of securely signed binaries built from spack develop as well as release branches and tags. Specifically: - remove internal pr mirror url generation logic in favor of buildcache destination on command line - with a single mirror url specified in the spack.yaml, this makes it clearer where binaries from various pipelines are pushed - designate some tags as reserved: ['public', 'protected', 'notary'] - these tags are stripped from all jobs by default and provisioned internally based on pipeline type - update gitlab ci yaml to include pipelines on more protected branches than just develop (so include releases and tags) - binaries from all protected pipelines are pushed into mirrors including the branch name so releases, tags, and develop binaries are kept separate - update rebuild jobs running on protected pipelines to run on special runners provisioned with an intermediate signing key - protected rebuild jobs no longer use "SPACK_SIGNING_KEY" env var to obtain signing key (in fact, final signing key is nowhere available to rebuild jobs) - these intermediate signatures are verified at the end of each pipeline by a new signing job to ensure binaries were produced by a protected pipeline - optionallly schedule a signing/notary job at the end of the pipeline to sign all packges in the mirror - add signing-job-attributes to gitlab-ci section of spack environment to allow configuration - signing job runs on special runner (separate from protected rebuild runners) provisioned with public intermediate key and secret signing key
2022-05-26py-tensorboard: add v2.9.0 (#30832)Adam J. Stewart1-13/+17
2022-05-25libtiff: remove extra dependencies/patch (#30854)Adam J. Stewart2-72/+6
2022-05-26bugfix: do not compute `package_hash` for old concrete specs (#30861)Todd Gamblin2-35/+50
Old concrete specs were slipping through in `_assign_hash`, and `package_hash` was attempting to recompute a package hash when we could not know the package a time of concretization. Part of this was that the logic for `_assign_hash` was hard to understand -- it was called twice from `_finalize_concretization` and had special cases for both args it was called with. It's much easier to understand the logic here if we just inline it. - [x] Get rid of `_assign_hash` and just integrate it with `_finalize_concretization` - [x] Don't call `_package_hash` at all for already-concrete specs. - [x] Add regression test.
2022-05-25py-numpy: add v1.22.4 (#30827)Adam J. Stewart2-1/+4
2022-05-25py-pythran: add v0.11.0 (#30829)Adam J. Stewart1-0/+4
2022-05-25openmpi: fixes for slurm and #29449 (#30299)Seth R. Johnson1-44/+19
2022-05-25Add nextflow 22.04.3 (#30855)Diego Alvarez1-0/+1
2022-05-25eagle: updating to version 1.1.3 (#30852)snehring1-3/+4
2022-05-25sed: fix recursive symlink (#30849)Seth R. Johnson1-0/+3
Use `spack build` as build dir to avoid recursive link error. ``` config.status: linking /var/folders/fy/x2xtwh1n7fn0_0q2kk29xkv9vvmbqb/T/s3j/spack-stage/spack-stage-sed-4.8-wraqsot6ofzvr3vrgusx4mj4mya5xfux/spack-src/GNUmakefile to GNUmakefile config.status: executing depfiles commands config.status: executing po-directories commands config.status: creating po/POTFILES config.status: creating po/Makefile ==> sed: Executing phase: 'build' ==> [2022-05-25-14:15:51.310333] 'make' '-j8' 'V=1' make: GNUmakefile: Too many levels of symbolic links make: stat: GNUmakefile: Too many levels of symbolic links make: *** No rule to make target `GNUmakefile'. Stop. ```
2022-05-25py-scikit-learn: add v1.1.1 (#30830)Adam J. Stewart1-0/+1
2022-05-25Pastix: new package (#30533)fpruvost1-0/+88
2022-05-25[mochi-margo] added version 0.9.10 (#30844)Matthieu Dorier1-0/+1
2022-05-25geant4: new version v11.0.2 (#30847)Ben Morgan1-0/+1
2022-05-25ccache: add missing pkgconfig dep (#30846)Harmen Stoppels1-3/+5
2022-05-25py-scipy: add v1.8.1 (#30831)Adam J. Stewart1-1/+2
2022-05-25reprimand: update homepage (#30840)Erik Schnetter1-1/+1
2022-05-25p7zip: fix %clang (#30843)Harmen Stoppels1-5/+16
2022-05-25dsfmt: set CC=cc (#30842)Harmen Stoppels1-1/+1
2022-05-25tau: add v2.31.1 (#30820)eugeneswalker1-0/+1
2022-05-25julia: support clang, set llvm NDEBUG correctly (#30800)Harmen Stoppels3-0/+64
2022-05-25mbedtls: add conflicts over inline asm trouble with clang@12: (#30801)Harmen Stoppels1-0/+4
2022-05-25[lcms] Added version 2.13.1 and URL version (#30811)Jen Herting1-0/+5
Co-authored-by: James A Zilberman <jazrc@rit.edu>
2022-05-25py-pillow-simd: mark conflicts with aarch64 (#30828)Adam J. Stewart1-0/+2
2022-05-24silo: Fix HDF5 1.13 API breakage (#30786)Chuck Atkins2-2/+44
2022-05-24Add aria2 1.36.0 (#30822)Derek Ryan Strong1-1/+2
2022-05-25Add rsync 3.2.4 (#30821)Derek Ryan Strong1-1/+2
2022-05-24[leveldb] add patch to fix check for -Wthread-safety (#30810)Matthieu Dorier2-0/+27
2022-05-24[libwebp] Added version 1.2.2 (#30814)Jen Herting1-0/+1
Co-authored-by: James A Zilberman <jazrc@rit.edu>
2022-05-24buildcache: Update layout and signing (#30750)Scott Wittenburg13-137/+550
This PR introduces a new build cache layout and package format, with improvements for both efficiency and security. ## Old Format Currently a binary package consists of a `spec.json` file at the root and a `.spack` file, which is a `tar` archive containing a copy of the `spec.json` format, possibly a detached signature (`.asc`) file, and a tar-gzip compressed archive containing the install tree. ``` build_cache/ # metadata (for indexing) <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.spec.json <arch>/ <compiler>/ <name>-<ver>/ # tar archive <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.spack # tar archive contents: # metadata (contains sha256 of internal .tar.gz) <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.spec.json # signature <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.spec.json.asc # tar.gz-compressed prefix <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.tar.gz ``` After this change, the nesting has been removed so that the `.spack` file is the compressed archive of the install tree. Now signed binary packages, will take the form of a clearsigned `spec.json` file (a `spec.json.sig`) at the root, while unsigned binary packages will contain a `spec.json` at the root. ## New Format ``` build_cache/ # metadata (for indexing, contains sha256 of .spack file) <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.spec.json # clearsigned spec.json metadata <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.spec.json.sig <arch>/ <compiler>/ <name>-<ver>/ # tar.gz-compressed prefix (may support more compression formats later) <arch>-<compiler>-<name>-<ver>-24zvipcqgg2wyjpvdq2ajy5jnm564hen.spack ``` ## Benefits The major benefit of this change is that the signatures on binary packages can be verified without: 1. Having to download the tarball, or 2. having to extract an unknown tarball. (1) is an improvement in efficiency; (2) is a security fix: we now ensure that we trust the binary before we try to run it through `tar`, which avoids potential attacks. ## Backward compatibility Also after this change, spack should still be able to handle the previous buildcache structure and binary mirrors with mixed layouts.
2022-05-24[libdeflate] Added version 1.10 (#30813)Jen Herting1-0/+1
Co-authored-by: James A Zilberman <jazrc@rit.edu>
2022-05-24Add a command to generate a local mirror for bootstrapping (#28556)Massimiliano Culpo12-70/+580
This PR builds on #28392 by adding a convenience command to create a local mirror that can be used to bootstrap Spack. This is to overcome the inconvenience in setting up this mirror manually, which has been reported when trying to setup Spack on air-gapped systems. Using this PR the user can create a bootstrapping mirror, on a machine with internet access, by: % spack bootstrap mirror --binary-packages /opt/bootstrap ==> Adding "clingo-bootstrap@spack+python %apple-clang target=x86_64" and dependencies to the mirror at /opt/bootstrap/local-mirror ==> Adding "gnupg@2.3: %apple-clang target=x86_64" and dependencies to the mirror at /opt/bootstrap/local-mirror ==> Adding "patchelf@0.13.1:0.13.99 %apple-clang target=x86_64" and dependencies to the mirror at /opt/bootstrap/local-mirror ==> Adding binary packages from "https://github.com/alalazo/spack-bootstrap-mirrors/releases/download/v0.1-rc.2/bootstrap-buildcache.tar.gz" to the mirror at /opt/bootstrap/local-mirror To register the mirror on the platform where it's supposed to be used run the following command(s): % spack bootstrap add --trust local-sources /opt/bootstrap/metadata/sources % spack bootstrap add --trust local-binaries /opt/bootstrap/metadata/binaries The mirror has to be moved over to the air-gapped system, and registered using the commands shown at prompt. The command has options to: 1. Add pre-built binaries downloaded from Github (default is not to add them) 2. Add development dependencies for Spack (currently the Python packages needed to use spack style) * bootstrap: refactor bootstrap.yaml to move sources metadata out * bootstrap: allow adding/removing custom bootstrapping sources This operation can be performed from the command line since new subcommands have been added to `spack bootstrap` * Add --trust argument to spack bootstrap add * Add a command to generate a local mirror for bootstrapping * Add a unit test for mirror creation
2022-05-24[libaec] Added version 1.0.6 (#30812)Jen Herting1-0/+1
Co-authored-by: James A Zilberman <jazrc@rit.edu>
2022-05-24Allow Kokkos with OpenMPTarget backend (#30724)Daniel Arndt1-0/+9
* Allow Kokkos with OpenMPTarget backend * Restrict SYCL and OpenMPTarget to C++17 or higher * Improve C++ standard check for SYCL and OpenMPTarget * Fix indentation
2022-05-24mpich: re-enable building of the older versions (#30766)Sergey Kosukhin1-1/+7
* mpich: enable building @3.4:3.4.3 ~cuda * mpich: add dependency on mxm
2022-05-24tbl2asn: adding currently available version (#30774)snehring1-6/+9
2022-05-24Best effort co-concretization (iterative algorithm) (#28941)Massimiliano Culpo12-206/+532
Currently, environments can either be concretized fully together or fully separately. This works well for users who create environments for interoperable software and can use `concretizer:unify:true`. It does not allow environments with conflicting software to be concretized for maximal interoperability. The primary use-case for this is facilities providing system software. Facilities provide multiple MPI implementations, but all software built against a given MPI ought to be interoperable. This PR adds a concretization option `concretizer:unify:when_possible`. When this option is used, Spack will concretize specs in the environment separately, but will optimize for minimal differences in overlapping packages. * Add a level of indirection to root specs This commit introduce the "literal" atom, which comes with a few different "arities". The unary "literal" contains an integer that id the ID of a spec literal. Other "literals" contain information on the requests made by literal ID. For instance zlib@1.2.11 generates the following facts: literal(0,"root","zlib"). literal(0,"node","zlib"). literal(0,"node_version_satisfies","zlib","1.2.11"). This should help with solving large environments "together where possible" since later literals can be now solved together in batches. * Add a mechanism to relax the number of literals being solved * Modify spack solve to display the new criteria Since the new criteria is above all the build criteria, we need to modify the way we display the output. Originally done by Greg in #27964 and cherry-picked to this branch by the co-author of the commit. Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com> * Inject reusable specs into the solve Instead of coupling the PyclingoDriver() object with spack.config, inject the concrete specs that can be reused. A method level function takes care of reading from the store and the buildcache. * spack solve: show output of multi-rounds * add tests for best-effort coconcretization * Enforce having at least a literal being solved Co-authored-by: Greg Becker <becker33@llnl.gov>
2022-05-24New package: py-x21 (#30225)Jen Herting1-0/+66
* Py-x21 now works, needs dependencies Conflicts: var/spack/repos/rit-rc/packages/py-x21/package.py * Added dependencies to py-x21 * Making flake style check happy * [py-x21] flake8 * [py-x21] - added homepage - added placeholder description - added comment about checksums * [py-x21] added darwin support and fixed issue with python 3.7 wheel name * [py-x21] adding checksum hash * [py-x21] removed duplicate py-pynacl * [py-x21] - updated description - updated version listing to have a different version for each version of python. Also, versions dependent on sys.platform - updated url_for_version to not require post concretized information so that spack checksum works * [py-x21] isort Co-authored-by: vehrc <vehrc@rit.edu>
2022-05-24environments: fail gracefully on missing keys (#26378)Seth R. Johnson1-1/+8
2022-05-24Update regex to correctly identify quoted args (#23494)edwardsp1-1/+1
Previously the regex was only checking for presence of quotes as a beginning or end character and not a matching set. This erroneously identified the following *single* argument as being quoted: source bashenvfile &> /dev/null && python3 -c "import os, json; print(json.dumps(dict(os.environ)))"
2022-05-24apptainer: new package (#30745)Matthias Wolf3-14/+77
2022-05-24vdt: add preload variant (#30030)iarspider1-0/+5
2022-05-24libfabric has needed rdma-core for efa since 1.10.0 (#30798)Evan Bollig1-0/+1
2022-05-24petsc: update rocrand location wrt rocm@5.1.0 (#30790)Satish Balay1-1/+5
rocm-5.1.0 removed librocrand.so from ROCM_DIR/rocrand/lib location (but includes are still at this location) /opt/rocm-5.0.2/lib/librocrand.so /opt/rocm-5.0.2/rocrand/lib/librocrand.so /opt/rocm-5.1.0/lib/librocrand.so drwxr-xr-x 2 root root 617 Mar 8 08:20 /opt/rocm-5.0.2/rocrand/include drwxr-xr-x 2 root root 617 Mar 31 09:48 /opt/rocm-5.1.0/rocrand/include
2022-05-24su2: add v7.3.1 (#30794)Mr-Timn1-0/+3
2022-05-24trilinos: add adelus, aprepro and teuchos variants (#28935)Paul Wolfenbarger1-0/+4
2022-05-24gplates: add v2.3.0 (#30676)Adam J. Stewart1-30/+38
2022-05-24compiler flags: imposed hashes impose the lack of additional compiler flags ↵Greg Becker1-0/+5
(#30797)
2022-05-24strip -Werror: all specific or none (#30284)Tom Scogland5-3/+127
Add a config option to strip `-Werror*` or `-Werror=*` from compile lines everywhere. ```yaml config: keep_werror: false ``` By default, we strip all `-Werror` arguments out of compile lines, to avoid unwanted failures when upgrading compilers. You can re-enable `-Werror` in your builds if you really want to, with either: ```yaml config: keep_werror: all ``` or to keep *just* specific `-Werror=XXX` args: ```yaml config: keep_werror: specific ``` This should make swapping in newer versions of compilers much smoother when maintainers have decided to enable `-Werror` by default.
2022-05-24specs: emit better parsing errors for specs. (#24860)Todd Gamblin5-27/+33
Parse error information is kept for specs, but it doesn't seem like we propagate it to the user when we encounter an error. This fixes that. e.g., for this error in a package: ```python depends_on("python@:3.8", when="0.900:") ``` Before, with no context and no clue that it's even from a particular spec: ``` ==> Error: Unexpected token: ':' ``` With this PR: ``` ==> Error: Unexpected token: ':' Encountered when parsing spec: 0.900: ^ ```