https://github.com/mithro/make-env
Repository containing common Makefiles for setting up conda environments.
https://github.com/mithro/make-env
conda-environment symbiflow template-makefile
Last synced: about 1 year ago
JSON representation
Repository containing common Makefiles for setting up conda environments.
- Host: GitHub
- URL: https://github.com/mithro/make-env
- Owner: mithro
- License: isc
- Created: 2020-06-08T22:39:07.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2023-02-10T17:29:03.000Z (over 3 years ago)
- Last Synced: 2025-04-15T03:52:34.722Z (about 1 year ago)
- Topics: conda-environment, symbiflow, template-makefile
- Language: Makefile
- Size: 48.8 KB
- Stars: 9
- Watchers: 11
- Forks: 9
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Authors: AUTHORS
Awesome Lists containing this project
README
# Makefile for create (conda) environments


This repository contains a Makefile to make it easy to set up a conda
environment and then run commands inside the environment.
# Using
## Step 1 - Add make-env to your repository
### Option 1a -- git submodules
The [`make-env`](https://github.com/SymbiFlow/make-env) git
repository can be added as a
[`git submodule`](https://git-scm.com/book/en/v2/Git-Tools-Submodules) of your
own git repository.
#### Adding using `git submodule`
```bash
git submodule add https://github.com/SymbiFlow/make-env.git third_party/make-env
```
#### Updating using `git submodule`
It is recommended you use an "auto rolling" dependency bot which sends you a
pull request every time the upstream module moves forward.
```bash
# TODO: Add stuff here.
```
### Option 1b -- `git subtrees`
The [`make-env`](https://github.com/SymbiFlow/make-env) git
repository can be directly imported into your repository using
[`git subtree`](https://www.atlassian.com/git/tutorials/git-subtree).
`git subtree`s offer a number of advantages over `git submodule`s, they
include;
* The contents of the subtree are directly included in your own tree, meaning
no extra clone nor recursive clone is needed. If the upstream source
disappears, you still have a complete copy of the repository contents.
* Edits can be done and sent upstream easily.
#### Adding using `git subtree`
```bash
git remote add -f make-env https://github.com/SymbiFlow/make-env.git
git subtree add --prefix third_party/make-env make-env master
git fetch make-env master
```
#### Updating using `git subtree`
```bash
git subtree pull --prefix third_party/make-env make-env master
```
## Step 2 - Create a Makefile
Create a Makefile which sets;
* `TOP_DIR` -- the directory where an `env` directory will be created in.
* `REQUIREMENTS_FILE` -- [A pip `requirements.txt` file](https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format).
* `ENVIRONMENT_FILE` -- [A conda `environment.yml` file](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html).
Include the `third_party/make-env/conda.mk` file.
Make your targets depend on `$(CONDA_ENV_PYTHON)` -- probably as an "order only
dependency".
Use `$(IN_CONDA_ENV)` before the commands you wish to run inside the conda
environment.
A [template Makefile](Makefile.template) is provided, see below;
```Makefile
# The top directory where environment will be created.
TOP_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
# A pip `requirements.txt` file.
# https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format
REQUIREMENTS_FILE := requirements.txt
# A conda `environment.yml` file.
# https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html
ENVIRONMENT_FILE := environment.yml
include third_party/make-env/conda.mk
# Example make target which runs commands inside the conda environment.
test-command: | $(CONDA_ENV_PYTHON)
@$(IN_CONDA_ENV) echo "Python is $$(which python)"
@$(IN_CONDA_ENV) python --version
```
# Testing
To make sure that `make-env` continues to work correctly and the template
Makefile is up to date, an example environment can be found in the test
directory.
```shell
# core.symlinks=true is needed so windows creates the symlinks.
git clone -c core.symlinks=true https://github.com/SymbiFlow/make-env.git
cd make-env/test
make test-command
```
# Todo list
- [ ] Make sure the conda can be disabled and system tooling be used directly.
- [ ] Add support for other types of environments;
- [ ] Docker provided dependencies.
- [ ] System python + virtualenv.
- [ ] (maybe?) nix-os provided dependencies
# Contributing
There are a couple of guidelines when contributing to this project which are
listed here.
### Sending
All contributions should be sent as
[GitHub Pull requests](https://help.github.com/articles/creating-a-pull-request-from-a-fork/).
### License
All software (code, associated documentation, support files, etc) in the
Project X-Ray repository are licensed under the very permissive
[ISC Licence](https://opensource.org/licenses/ISC). A copy can be found in the
[`LICENSE`](LICENSE) file.
All new contributions must also be released under this license.
### Code of Conduct
By contributing you agree to the [code of conduct](CODE_OF_CONDUCT.md). We
follow the open source best practice of using the [Contributor
Covenant](https://www.contributor-covenant.org/) for our Code of Conduct.
### Sign your work
To improve tracking of who did what, we follow the Linux Kernel's
["sign your work" system](https://github.com/wking/signed-off-by).
This is also called a
["DCO" or "Developer's Certificate of Origin"](https://developercertificate.org/).
**All** commits are required to include this sign off and we use the
[Probot DCO App](https://github.com/probot/dco) to check pull requests for
this.
The sign-off is a simple line at the end of the explanation for the
patch, which certifies that you wrote it or otherwise have the right to
pass it on as a open-source patch. The rules are pretty simple: if you
can certify the below:
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
then you just add a line saying
Signed-off-by: Random J Developer
using your real name (sorry, no pseudonyms or anonymous contributions.)
You can add the signoff as part of your commit statement. For example:
git commit --signoff -a -m "Fixed some errors."
*Hint:* If you've forgotten to add a signoff to one or more commits, you can use the
following command to add signoffs to all commits between you and the upstream
master:
git rebase --signoff upstream/master