write shell in sh.yml
Project description
Sometimes gnu make reminds me how old I am, shyml makes me feel like a baby again.
Getting started
Install
Install with pip install shyml.
Executable and shebang
Create a executable yaml file in your repo (name it sh.yml by convention) with shyml in the shebang as such:
#!/usr/bin/env shyml
Then, start adding a YAML document in it.
Example
#!/usr/bin/env shyml
name: foo
help: bar
requires:
- other
script:
- ./super
long
line
- shyml_otherjob # call another job as a bash function
---
name: otherjob
script: |
your code here
Document model
Each YAML document (separated by —) should contain a name key.
Other keys it can define:
script: a bash script in list or string format, arguments will be proxied
help: a help text to describe the job
color: a color to render the job name
requires: the list of other jobs to execute prior to this job
hook: set to before toautomatically execute before any other
env: a YAML hash of env var
CLI Usage
./sh.yml # lists jobs
./sh.yml jobname # run a job in a local bash shell
shell=xonsh ./sh.yml jobname # apparently you your sh.yml contains xonsh instead of bash ^^
./sh.yml debug jobname # print a job script code
./sh.yml test jobname # print a job help
Example replacing tox.ini
So, initially shyml was born because I wanted to get too much out of tox. Namely, centralizing test automation and eventually deployment (for integration testing) in a single multi-script file, for usage in various contexts:
in the system python environment, ie. in a built container
in the user python environment, that is where i have checked out all development source code I want to hack at the version that I develop with (and I try hard to stick to upstream and have forward-compatible code)
in a virtualenv, to test against released module versions.
To address this, I use such shyml job, that will make a venv with python3 by default, not setup any venv if venv=none, and use the user environment if venv=user.
---
name: install
help: |
Setup and activate a venv for a python executable
If venv=none, it will not do any venv.
If venv=user, it will use pip install --user.
script: |
if [ "${venv-}" = "user" ]; then
pip_install="pip install --user"
elif [ "${venv-}" != "none" ]; then
export python="${python-python3}"
export path="${path-.venv.$python}"
test -d $path || virtualenv --python=$python $path
set +eux; echo activating $path; source $path/bin/activate; set -eux
fi
${pip_install-pip install} -Ue .[test]
---
name: test
help: Run test in a python3 venv by default.
script: shyml_install && py.test -vv --cov src --strict -r fEsxXw ${@-src}
Then, I can run:
venv=user ./sh.yml test # in my home
venv=none ./sh.yml test # in a built container
./sh.yml test # just run tests in the default venv tox-like
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file shyml-0.9.1.dev1.tar.gz
.
File metadata
- Download URL: shyml-0.9.1.dev1.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab24f89775526fa5a1318d8794fef46e8ab590a291a6f51a924c9243d3403af1 |
|
MD5 | 9816afac5742a2ff98bfc7d6d8a956cf |
|
BLAKE2b-256 | 65c744d05e5d74b9dc50cfb3ec94fdc62e8def0f398990a4a99a5b68f0862b34 |