summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-05-28Separable module configuration -- without the bugs this time (#23703)Greg Becker36-222/+691
Currently, module configurations are inconsistent because modulefiles are generated with the configs for the active environment, but are shared among all environments (and spack outside any environment). This PR fixes that by allowing Spack environments (or other spack config scopes) to define additional sets of modules to generate. Each set of modules can enable either lmod or tcl modules, and contains all of the previously available module configuration. The user defines the name of each module set -- the set configured in Spack by default is named "default", and is the one returned by module manipulation commands in the absence of user intervention. As part of this change, the module roots configuration moved from the config section to inside each module configuration. Additionally, it adds a feature that the modulefiles for an environment can be configured to be relative to an environment view rather than the underlying prefix. This will not be enabled by default, as it should only be enabled within an environment and for non-default views constructed with separate projections per-spec.
2021-05-28New Package:py-ucsf-pyem (#23961)Desmond Orton1-0/+38
* New Package:py-ucsf-pyem * Dep additions, eun env deletion * extraction step change Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2021-05-28mpich: add v3.4.2 (#24002)Ken Raffenetti1-0/+1
2021-05-28New Package: py-retry-decorator (#23967)Desmond Orton1-0/+19
* New Package: py-retry-decorator * pypi link correction Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2021-05-28Pipelines: reproducible builds (#22887)Scott Wittenburg15-559/+1679
### Overview The goal of this PR is to make gitlab pipeline builds (especially build failures) more reproducible outside of the pipeline environment. The two key changes here which aim to improve reproducibility are: 1. Produce a `spack.lock` during pipeline generation which is passed to child jobs via artifacts. This concretized environment is used both by generated child jobs as well as uploaded as an artifact to be used when reproducing the build locally. 2. In the `spack ci rebuild` command, if a spec needs to be rebuilt from source, do this by generating and running an `install.sh` shell script which is then also uploaded as a job artifact to be run during local reproduction. To make it easier to take advantage of improved build reproducibility, this PR also adds a new subcommand, `spack ci reproduce-build`, which, given a url to job artifacts: - fetches and unzips the job artifacts to a local directory - looks for the generated pipeline yaml and parses it to find details about the job to reproduce - attempts to provide a copy of the same version of spack used in the ci build - if the ci build used a docker image, the command prints a `docker run` command you can run to get an interactive shell for reproducing the build #### Some highlights One consequence of this change will be much smaller pipeline yaml files. By encoding the concrete environment in a `spack.lock` and passing to child jobs via artifacts, we will no longer need to encode the concrete root of each spec and write it into the job variables, greatly reducing the size of the generated pipeline yaml. Additionally `spack ci rebuild` output (stdout/stderr) is no longer internally redirected to a log file, so job output will appear directly in the gitlab job trace. With debug logging turned on, this often results in log files getting truncated because they exceed the maximum amount of log output gitlab allows. If this is a problem, you still have the option to `tee` command output to a file in the within the artifacts directory, as now each generated job exposes a `user_data` directory as an artifact, which you can fill with whatever you want in your custom job scripts. There are some changes to be aware of in how pipelines should be set up after this PR: #### Pipeline generation Because the pipeline generation job now writes a `spack.lock` artifact to be consumed by generated downstream jobs, `spack ci generate` takes a new option `--artifacts-root`, inside which it creates a `concrete_env` directory to place the lockfile. This artifacts root directory is also where the `user_data` directory will live, in case you want to generate any custom artifacts. If you do not provide `--artifacts-root`, the default is for it to create a `jobs_scratch_dir` within your `CI_PROJECT_DIR` (a gitlab predefined environment variable) or whatever is your current working directory if that variable isn't set. Here's the diff of the PR testing `.gitlab-ci.yml` taking advantage of the new option: ``` $ git diff develop..pipelines-reproducible-builds share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml diff --git a/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml b/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml index 579d7b56f3..0247803a30 100644 --- a/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml +++ b/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml @@ -28,10 +28,11 @@ default: - cd share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME} - spack env activate --without-view . - spack ci generate --check-index-only + --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir" --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml" artifacts: paths: - - "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml" + - "${CI_PROJECT_DIR}/jobs_scratch_dir" tags: ["spack", "public", "medium", "x86_64"] interruptible: true ``` Notice how we replaced the specific pointer to the generated pipeline file with its containing folder, the same folder we passed as `--artifacts-root`. This way anything in that directory (the generated pipeline yaml, as well as the concrete environment directory containing the `spack.lock`) will be uploaded as an artifact and available to the downstream jobs. #### Rebuild jobs Rebuild jobs now must activate the concrete environment created by `spack ci generate` and provided via artifacts. When the pipeline is generated, a directory called `concrete_environment` is created within the artifacts root directory, and this is where the `spack.lock` file is written to be passed to the generated rebuild jobs. The artifacts root directory can be specified using the `--artifacts-root` option to `spack ci generate`, otherwise, it is assumed to be `$CI_PROJECT_DIR`. The directory containing the concrete environment files (`spack.yaml` and `spack.lock`) is then passed to generated child jobs via the `SPACK_CONCRETE_ENV_DIR` variable in the generated pipeline yaml file. When you don't provide custom `script` sections in your `mappings` within the `gitlab-ci` section of your `spack.yaml`, the default behavior of rebuild jobs is now to change into `SPACK_CONCRETE_ENV_DIR` and activate that environment. If you do provide custom rebuild scripts in your `spack.yaml`, be aware those scripts should do the same thing: assume `SPACK_CONCRETE_ENV_DIR` contains the concretized environment to activate. No other changes to existing custom rebuild scripts should be required as a result of this PR. As mentioned above, one key change made in this PR is the generation of the `install.sh` script by the rebuild jobs, as that same script is both run by the CI rebuild job as well as exported as an artifact to aid in subsequent attempts to reproduce the build outside of CI. The generated `install.sh` script contains only a single `spack install` command with arguments computed by `spack ci rebuild`. If the install fails, the job trace in gitlab will contain instructions on how to reproduce the build locally: ``` To reproduce this build locally, run: spack ci reproduce-build https://gitlab.next.spack.io/api/v4/projects/7/jobs/240607/artifacts [--working-dir <dir>] If this project does not have public pipelines, you will need to first: export GITLAB_PRIVATE_TOKEN=<generated_token> ... then follow the printed instructions. ``` When run locally, the `spack ci reproduce-build` command shown above will download and process the job artifacts from gitlab, then print out instructions you can copy-paste to run a local reproducer of the CI job. This PR includes a few other changes to the way pipelines work, see the documentation on pipelines for more details. This PR erelies on ~- [ ] #23194 to be able to refer to uninstalled specs by DAG hash~ EDIT: that is going to take longer to come to fruition, so for now, we will continue to install specs represented by a concrete `spec.yaml` file on disk. - [x] #22657 to support install a single spec already present in the active, concrete environment
2021-05-28Add cxxstd to trilinos deps in nalu-wind (#23976)psakievich1-3/+3
Co-authored-by: Philip Sakievich <psakiev@sanida.gov>
2021-05-28armadillo: update and allow build with MKL (#23875)Glenn Johnson1-0/+28
2021-05-28argon2: ensure libraries are installed under lib (#21805)Olivier Cessenat1-1/+1
Make a standard installation for libs in lib not lib/x86_64-linux-gnu for cmake
2021-05-28aocc version detection (#23907)Greg Becker1-1/+4
2021-05-28freebayes: add v1.3.5, move to MesonPackage (#23772)Desmond Orton1-2/+28
2021-05-28r-boot: add v1.3-28 (#23992)Manuela Kuhn1-0/+1
2021-05-28opencv: add v4.5.2 (#23913)Adam J. Stewart1-0/+1
2021-05-28root: disable afterimage when ~x (#23962)Seth R. Johnson1-1/+1
2021-05-28r-matrix: add v1.3-3 (#23995)Manuela Kuhn1-0/+1
2021-05-28openfst: add v1.8.1, add "python" variant (#23850)archxlith1-7/+7
2021-05-28r-lattice: add v0.20-44 (#23994)Manuela Kuhn1-0/+1
2021-05-28vecgeom: add v1.1.15 (#23973)Seth R. Johnson1-0/+1
2021-05-28modeltest-ng: add new package (#23765)Desmond Orton1-0/+29
2021-05-28r-mass: add v7.3-54 (#23996)Manuela Kuhn1-0/+1
2021-05-28r-nlme: add v3.1-152 (#23997)Manuela Kuhn1-0/+1
2021-05-28r-lme4: add v1.1-27 (#23998)Manuela Kuhn1-0/+1
2021-05-28r-pbkrtest: add v0.5.1 (#23999)Manuela Kuhn1-0/+1
2021-05-28singularity: add v3.7.4 (#23954)Robert Mijakovic1-0/+1
Co-authored-by: Robert Mijakovic <robert.mijakovic@lxp.lu>
2021-05-28embree: add v3.13.0, fix build (#23986)Martin Aumüller1-35/+23
* embree: allow for compiling with gcc 7.3 strip out unsupported -mprefer-vector-width=256 * embree: fix build on AMD CPUs The ISAs that embree is compiled for have to match the CPU features enabled by the compiler, as embree derives theISA that it compiles for from the latter. Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2021-05-28SLEPc: add v3.15.1 (#23987)Jose E. Roman2-1/+3
2021-05-28lbann: add v0.102, add variant to enable address sanitizer. (#23981)Brian Van Essen1-0/+3
2021-05-28build(deps): bump actions/cache from 2.1.5 to 2.1.6 (#23983)dependabot[bot]1-1/+1
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.5 to 2.1.6. - [Release notes](https://github.com/actions/cache/releases) - [Commits](https://github.com/actions/cache/compare/v2.1.5...v2.1.6) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-05-28botan: add v2.17.3, v2.18.0 and v2.18.1 (#23984)Martin Aumüller1-0/+3
2021-05-28ispc: add v1.15.0 (#23985)Martin Aumüller1-0/+1
2021-05-28Use AWS CloudFront for source mirror (#23978)Todd Gamblin1-1/+1
Spack's source mirror was previously in a plain old S3 bucket. That will still work, but we can do better. This switches to AWS's CloudFront CDN for hosting the mirror. CloudFront is 16x faster (or more) than the old bucket. - [x] change mirror to https://mirror.spack.io
2021-05-28libhio: added version 1.4.1.6 (#23975)plamborn1-0/+1
2021-05-27Fix ZFP cuda build. (#23941)Ben Corbett1-1/+9
2021-05-28py-cfgrib: add new version (#23916)Adam J. Stewart1-2/+17
2021-05-27py-geocube: add new package (#23909)Adam J. Stewart1-0/+28
2021-05-28py-gql: Added version and deps for @0.4.0 (#23927)Desmond Orton1-7/+13
* Added version and deps for @0.4.0 * Switched to pypi, fixed deps * deprecation removal
2021-05-28New Package: py-google-apitools (#23968)Desmond Orton1-0/+24
* New Package: py-google-apitools * proper python constraints Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2021-05-27New package:py-coveralls (#23930)Desmond Orton1-0/+26
* New package:py-coveralls * dep fixes * added python constraint * pyyaml version constraint Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2021-05-27py-healpy: added missing dep (#23960)Desmond Orton1-1/+3
* py-healpy: added missing dep * added healpix and pkgconfig
2021-05-27Update nvshmem package to use public URL (#23933)romerojosh1-18/+48
2021-05-27Add fuse virtual dependency, new macfuse package (#23904)Adam J. Stewart8-10/+58
2021-05-27bugfix: mirror index shows missing packages (#23939)Greg Becker3-4/+66
- [x] add `in_buildcache` field to DB records to indicate what parts of an index, which includes roots and dependencies, are in the buildcache. - [x] add `mark()` method to DB for setting values on single nodes of the DAG.
2021-05-27wget: add new version, fix macOS build (#23921)Adam J. Stewart1-0/+2
2021-05-27gtkplus: add 3.24.29 (#23896)Michael Kuhn1-0/+6
This also fixes the build with %gcc@11:. According to upstream, the proper solution is to disable -Werror=array-bounds since the stable branch will not receive a patch for newer compilers.
2021-05-27py-eccodes: add new package (#23906)Adam J. Stewart1-0/+49
2021-05-27py-datacube: add new package (#23905)Adam J. Stewart1-0/+49
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2021-05-27plumed: add missing m4 dependency (#23957)Adam J. Stewart1-0/+1
2021-05-27Update py-pint and fix runtime dependency on setuptools (#23950)Sebastian Schmitt1-2/+6
* Update py-pint and fix runtime dependency on setuptools Without the runtime dependency on setuptools, importing pint yields: 0.11: ModuleNotFoundError: No module named 'pkg_resources' 0.17: ModuleNotFoundError: No module named 'packaging' * Fix * Address comments
2021-05-27New package: py-promise (#23936)Desmond Orton1-0/+24
* New package: py-promise * removed test deps, added missing dep
2021-05-27py-hatchet: update v1.3.0 checksum (#23902)Tamara Dahlgren1-1/+1
2021-05-27py-rasterio: add v1.2.3 (#23945)Adam J. Stewart1-2/+4