diff --git a/.calkit/env-locks/py.yml b/.calkit/env-locks/py.yml new file mode 100644 index 0000000..61edee3 --- /dev/null +++ b/.calkit/env-locks/py.yml @@ -0,0 +1,69 @@ +channels: + - conda-forge +dependencies: + - brotli=1.1.0=hd74edd7_2 + - brotli-bin=1.1.0=hd74edd7_2 + - bzip2=1.0.8=h99b78c6_7 + - ca-certificates=2025.4.26=hbd8a1cb_0 + - contourpy=1.3.2=py312hb23fbb9_0 + - cycler=0.12.1=pyhd8ed1ab_1 + - fonttools=4.58.0=py312h998013c_0 + - freetype=2.13.3=hce30654_1 + - kiwisolver=1.4.8=py312h2c4a281_0 + - lcms2=2.17=h7eeda09_0 + - lerc=4.0.0=hd64df32_1 + - libblas=3.9.0=31_h10e41b3_openblas + - libbrotlicommon=1.1.0=hd74edd7_2 + - libbrotlidec=1.1.0=hd74edd7_2 + - libbrotlienc=1.1.0=hd74edd7_2 + - libcblas=3.9.0=31_hb3479ef_openblas + - libcxx=20.1.5=ha82da77_0 + - libdeflate=1.24=h5773f1b_0 + - libexpat=2.7.0=h286801f_0 + - libffi=3.4.6=h1da3d7d_1 + - libfreetype=2.13.3=hce30654_1 + - libfreetype6=2.13.3=h1d14073_1 + - libgfortran=14.2.0=heb5dd2a_105 + - libgfortran5=14.2.0=h2c44a93_105 + - libjpeg-turbo=3.1.0=h5505292_0 + - liblapack=3.9.0=31_hc9a63f6_openblas + - liblzma=5.8.1=h39f12f2_1 + - libopenblas=0.3.29=openmp_hf332438_0 + - libpng=1.6.47=h3783ad8_0 + - libsqlite=3.49.2=h3f77e49_0 + - libtiff=4.7.0=h2f21f7c_5 + - libwebp-base=1.5.0=h2471fea_0 + - libxcb=1.17.0=hdb1d25a_0 + - libzlib=1.3.1=h8359307_2 + - llvm-openmp=20.1.5=hdb05f8b_0 + - matplotlib=3.10.3=py312h1f38498_0 + - matplotlib-base=3.10.3=py312hdbc7e53_0 + - munkres=1.1.4=pyh9f0ad1d_0 + - ncurses=6.5=h5e97a16_3 + - numpy=2.2.6=py312h7c1f314_0 + - openjpeg=2.5.3=h8a3d83b_0 + - openssl=3.5.0=h81ee809_1 + - packaging=25.0=pyh29332c3_1 + - pandas=2.2.3=py312hcb1e3ce_3 + - pillow=11.2.1=py312h50aef2c_0 + - pip=25.1.1=pyh8b19718_0 + - pthread-stubs=0.4=hd74edd7_1002 + - pyparsing=3.2.3=pyhd8ed1ab_1 + - python=3.12.10=hc22306f_0_cpython + - python-dateutil=2.9.0.post0=pyhff2d567_1 + - python-tzdata=2025.2=pyhd8ed1ab_0 + - python_abi=3.12=7_cp312 + - pytz=2025.2=pyhd8ed1ab_0 + - qhull=2020.2=h420ef59_5 + - readline=8.2=h1d1bf99_2 + - setuptools=80.8.0=pyhff2d567_0 + - six=1.17.0=pyhd8ed1ab_0 + - tk=8.6.13=h5083fa2_1 + - tornado=6.5.1=py312hea69d52_0 + - tzdata=2025b=h78e105d_0 + - unicodedata2=16.0.0=py312hea69d52_0 + - wheel=0.45.1=pyhd8ed1ab_1 + - xorg-libxau=1.0.12=h5505292_0 + - xorg-libxdmcp=1.1.5=hd74edd7_0 + - zstd=1.5.7=h6491c7d_2 +name: calkit-example-basic diff --git a/.calkit/env-locks/tex.json b/.calkit/env-locks/tex.json new file mode 100644 index 0000000..6f48974 --- /dev/null +++ b/.calkit/env-locks/tex.json @@ -0,0 +1,71 @@ +[ + { + "RepoTags": [ + "texlive/texlive:latest-full" + ], + "Parent": "", + "Comment": "buildkit.dockerfile.v0", + "Created": "2025-05-11T13:45:24.681068416Z", + "Author": "", + "Config": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "LANG=C.UTF-8", + "LC_ALL=C.UTF-8", + "TEXLIVE_INSTALL_NO_CONTEXT_CACHE=1", + "NOPERLDOC=1", + "DEBIAN_FRONTEND=noninteractive" + ], + "Cmd": [ + "bash" + ], + "Image": "", + "Volumes": null, + "WorkingDir": "/workdir", + "Entrypoint": null, + "OnBuild": null, + "Labels": { + "org.opencontainers.image.authors": "Island of TeX", + "org.opencontainers.image.source": "https://gitlab.com/islandoftex/images/texlive/-/blob/master/Dockerfile", + "org.opencontainers.image.url": "https://gitlab.com/islandoftex/images/texlive" + } + }, + "Architecture": "arm64", + "Os": "linux", + "Size": 2409562089, + "GraphDriver": { + "Data": null, + "Name": "overlayfs" + }, + "RootFS": { + "Type": "layers", + "Layers": [ + "sha256:f20086072b1d2fffdc8a8a3afc546d1ecb13a9047ac9cc6c941e9783ba2c1c40", + "sha256:cc4ebc54dd55374e26421ee3710a3cb932690ec294b3665230f54ae0ddbbacec", + "sha256:2ff8561f9f970e166f982b4a6f584a0ce9a275836a281d9e5b62fb27d6a99e8f", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef", + "sha256:6b5bb1acd1ecb71e7df10f16fba58ee8afbc1a4295b26486766742471c7380bf", + "sha256:84cc1f955c35ccf33e8c50a7e8cab52e5c5e186124d3d2dc294de9d227ca2f9e", + "sha256:e408bd808583af5c8c473d3a99d1e503095ebae3752b54408e274eb7596f163f", + "sha256:8d7558178b2bf04a68ead86ebe9fe20fe199f9e4703cddf9389f508711365a83", + "sha256:0b653ec0cefe2beb09dee6dfd05199f92481c2cdd0d893aa5f6cfca402f301d8" + ] + }, + "Descriptor": { + "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", + "digest": "sha256:ac2a1fbc4dad1ec27c7407c24907af5a38a5f53c4baf9c6dc5973efd34b355e6", + "size": 685 + }, + "DockerfileMD5": null, + "DepsMD5s": {} + } +] \ No newline at end of file diff --git a/calkit.yaml b/calkit.yaml index 1ce9cee..d374820 100644 --- a/calkit.yaml +++ b/calkit.yaml @@ -1,13 +1,46 @@ owner: calkit name: example-basic title: Basic Calkit example -description: A basic Calkit exmple project. +description: A basic Calkit example project. git_repo_url: https://github.com/calkit/example-basic dependencies: - docker - conda questions: - Can we make reproducibility simple? +environments: + py: + path: environment.yml + kind: conda + description: A Python environment + tex: + kind: docker + image: texlive/texlive:latest-full + description: TeX Live via Docker. +pipeline: + stages: + collect-data: + kind: python-script + script_path: scripts/collect-data.py + environment: py + outputs: + - data/raw/data.csv + plot-voltage: + kind: python-script + script_path: scripts/plot-voltage.py + environment: py + inputs: + - from_stage_outputs: collect-data + outputs: + - figures/voltage-time-series.png + build-paper: + kind: latex + target_path: paper/paper.tex + environment: tex + inputs: + - figures + outputs: + - paper/paper.pdf datasets: - path: data/raw/data.csv title: Raw data @@ -23,13 +56,3 @@ publications: title: The paper description: This is the paper. stage: build-paper -environments: - py: - path: environment.yml - kind: conda - description: A Python environment - tex: - kind: docker - image: texlive/texlive:latest-full - wdir: /work - description: TeX Live via Docker. diff --git a/dvc.lock b/dvc.lock index 71d60c3..02232b7 100644 --- a/dvc.lock +++ b/dvc.lock @@ -1,12 +1,12 @@ schema: '2.0' stages: collect-data: - cmd: calkit xenv -n py -- python scripts/collect-data.py + cmd: calkit xenv -n py --no-check -- python scripts/collect-data.py deps: - - path: environment.yml + - path: .calkit/env-locks/py.yml hash: md5 - md5: 627d0116e60eab837fbf07edb4d370e0 - size: 114 + md5: 8119fb42c7e8531010248790fff169cf + size: 2200 - path: scripts/collect-data.py hash: md5 md5: eeab1328ac4a9df2ef2452d32c1e6cce @@ -14,19 +14,19 @@ stages: outs: - path: data/raw/data.csv hash: md5 - md5: 2ba6a2254202b7055d370eb59a35dfae - size: 43644 + md5: c3319d519671cab28a01aca7a7d199f9 + size: 43633 plot-voltage: - cmd: calkit xenv -n py -- python scripts/plot-voltage.py + cmd: calkit xenv -n py --no-check -- python scripts/plot-voltage.py deps: - - path: data/raw/data.csv + - path: .calkit/env-locks/py.yml hash: md5 - md5: 2ba6a2254202b7055d370eb59a35dfae - size: 43644 - - path: environment.yml + md5: 8119fb42c7e8531010248790fff169cf + size: 2200 + - path: data/raw/data.csv hash: md5 - md5: 627d0116e60eab837fbf07edb4d370e0 - size: 114 + md5: c3319d519671cab28a01aca7a7d199f9 + size: 43633 - path: scripts/plot-voltage.py hash: md5 md5: 087a567a0c0f6199a908399013d564a1 @@ -34,8 +34,8 @@ stages: outs: - path: figures/voltage-time-series.png hash: md5 - md5: d4cd33821c032be468a77d65873937bc - size: 43613 + md5: b0d7f4d7cddb00d3d8c1758720e4d79b + size: 45261 copy-figures-to-paper-dir: cmd: cp -r figures paper/figures deps: @@ -51,19 +51,62 @@ stages: size: 45148 nfiles: 2 build-paper: - cmd: "calkit xenv -n tex -- latexmk -cd -interaction=nonstopmode -pdf paper/paper.tex\n" + cmd: calkit xenv -n tex --no-check -- latexmk -cd -interaction=nonstopmode -pdf + paper/paper.tex deps: + - path: .calkit/env-locks/tex.json + hash: md5 + md5: b04cd12c7a8313853c8739a55f6320fe + size: 2791 - path: figures hash: md5 - md5: 1a9009ee25ecfe1fbfe1916de2eb7deb.dir - size: 43638 + md5: 1d42180c43a4f7c68c0bb3c98f7e3896.dir + size: 45286 nfiles: 2 - path: paper/paper.tex hash: md5 - md5: 6455fc859c8b1838f22d5ac74223b323 - size: 604 + md5: 1480301e18c57bf533d604e1a3593101 + size: 653 outs: - path: paper/paper.pdf hash: md5 - md5: 6f1fec0754597ecdb78cf0e9852884ad - size: 92860 + md5: 3020732b698cfd131ef6c1bc0d207521 + size: 95329 + _check_env_py: + cmd: calkit check conda-env --file environment.yml --output .calkit/env-locks/py.yml + deps: + - path: environment.yml + hash: md5 + md5: 4282ecbec6810eb293bdf62d7f956ffd + size: 119 + outs: + - path: .calkit/env-locks/py.yml + hash: md5 + md5: 8119fb42c7e8531010248790fff169cf + size: 2200 + _check_env_tex: + cmd: calkit check docker-env texlive/texlive:latest-full -o .calkit/env-locks/tex.json + outs: + - path: .calkit/env-locks/tex.json + hash: md5 + md5: b04cd12c7a8313853c8739a55f6320fe + size: 2791 + _check-env-py: + cmd: calkit check conda-env --file environment.yml --output .calkit/env-locks/py.yml + deps: + - path: environment.yml + hash: md5 + md5: 4282ecbec6810eb293bdf62d7f956ffd + size: 119 + outs: + - path: .calkit/env-locks/py.yml + hash: md5 + md5: 8119fb42c7e8531010248790fff169cf + size: 2200 + _check-env-tex: + cmd: calkit check docker-env texlive/texlive:latest-full -o .calkit/env-locks/tex.json + outs: + - path: .calkit/env-locks/tex.json + hash: md5 + md5: b04cd12c7a8313853c8739a55f6320fe + size: 2791 diff --git a/dvc.yaml b/dvc.yaml index d619667..fd88175 100644 --- a/dvc.yaml +++ b/dvc.yaml @@ -1,25 +1,42 @@ stages: + _check-env-py: + cmd: calkit check conda-env --file environment.yml --output .calkit/env-locks/py.yml + deps: + - environment.yml + outs: + - .calkit/env-locks/py.yml: + cache: false + persist: true + always_changed: true + _check-env-tex: + cmd: calkit check docker-env texlive/texlive:latest-full -o .calkit/env-locks/tex.json + deps: [] + outs: + - .calkit/env-locks/tex.json: + cache: false + persist: true + always_changed: true collect-data: - cmd: calkit xenv -n py -- python scripts/collect-data.py + cmd: calkit xenv -n py --no-check -- python scripts/collect-data.py deps: - scripts/collect-data.py - - environment.yml + - .calkit/env-locks/py.yml outs: - data/raw/data.csv plot-voltage: - cmd: calkit xenv -n py -- python scripts/plot-voltage.py + cmd: calkit xenv -n py --no-check -- python scripts/plot-voltage.py deps: - scripts/plot-voltage.py + - .calkit/env-locks/py.yml - data/raw/data.csv - - environment.yml outs: - figures/voltage-time-series.png build-paper: - cmd: > - calkit xenv -n tex -- - latexmk -cd -interaction=nonstopmode -pdf paper/paper.tex + cmd: calkit xenv -n tex --no-check -- latexmk -cd -interaction=nonstopmode + -pdf paper/paper.tex deps: - - figures - paper/paper.tex + - figures + - .calkit/env-locks/tex.json outs: - paper/paper.pdf diff --git a/environment-lock.yml b/environment-lock.yml deleted file mode 100644 index 9743edd..0000000 --- a/environment-lock.yml +++ /dev/null @@ -1,138 +0,0 @@ -channels: - - conda-forge -dependencies: - - _libgcc_mutex=0.1 - - _openmp_mutex=4.5 - - alsa-lib=1.2.13 - - brotli=1.1.0 - - brotli-bin=1.1.0 - - bzip2=1.0.8 - - ca-certificates=2024.8.30 - - cairo=1.18.2 - - certifi=2024.8.30 - - contourpy=1.3.1 - - cycler=0.12.1 - - cyrus-sasl=2.1.27 - - dbus=1.13.6 - - double-conversion=3.3.0 - - expat=2.6.4 - - font-ttf-dejavu-sans-mono=2.37 - - font-ttf-inconsolata=3.000 - - font-ttf-source-code-pro=2.038 - - font-ttf-ubuntu=0.83 - - fontconfig=2.15.0 - - fonts-conda-ecosystem=1 - - fonts-conda-forge=1 - - fonttools=4.55.3 - - freetype=2.12.1 - - graphite2=1.3.13 - - harfbuzz=9.0.0 - - icu=75.1 - - keyutils=1.6.1 - - kiwisolver=1.4.7 - - krb5=1.21.3 - - lcms2=2.16 - - ld_impl_linux-64=2.43 - - lerc=4.0.0 - - libblas=3.9.0 - - libbrotlicommon=1.1.0 - - libbrotlidec=1.1.0 - - libbrotlienc=1.1.0 - - libcblas=3.9.0 - - libclang-cpp19.1=19.1.5 - - libclang13=19.1.5 - - libcups=2.3.3 - - libdeflate=1.22 - - libdrm=2.4.124 - - libedit=3.1.20191231 - - libegl=1.7.0 - - libexpat=2.6.4 - - libffi=3.4.2 - - libgcc=14.2.0 - - libgcc-ng=14.2.0 - - libgfortran=14.2.0 - - libgfortran5=14.2.0 - - libgl=1.7.0 - - libglib=2.82.2 - - libglvnd=1.7.0 - - libglx=1.7.0 - - libgomp=14.2.0 - - libiconv=1.17 - - libjpeg-turbo=3.0.0 - - liblapack=3.9.0 - - libllvm19=19.1.5 - - liblzma=5.6.3 - - libmpdec=4.0.0 - - libntlm=1.4 - - libopenblas=0.3.28 - - libopengl=1.7.0 - - libpciaccess=0.18 - - libpng=1.6.44 - - libpq=17.2 - - libsqlite=3.47.2 - - libstdcxx=14.2.0 - - libstdcxx-ng=14.2.0 - - libtiff=4.7.0 - - libuuid=2.38.1 - - libwebp-base=1.4.0 - - libxcb=1.17.0 - - libxkbcommon=1.7.0 - - libxml2=2.13.5 - - libxslt=1.1.39 - - libzlib=1.3.1 - - matplotlib=3.9.3 - - matplotlib-base=3.9.3 - - munkres=1.1.4 - - mysql-common=9.0.1 - - mysql-libs=9.0.1 - - ncurses=6.5 - - numpy=2.2.0 - - openjpeg=2.5.3 - - openldap=2.6.9 - - openssl=3.4.0 - - packaging=24.2 - - pandas=2.2.3 - - pcre2=10.44 - - pillow=11.0.0 - - pip=24.3.1 - - pixman=0.44.2 - - pthread-stubs=0.4 - - pyparsing=3.2.0 - - pyside6=6.8.0.2 - - python=3.13.1 - - python-dateutil=2.9.0.post0 - - python-tzdata=2024.2 - - python_abi=3.13 - - pytz=2024.1 - - qhull=2020.2 - - qt6-main=6.8.0 - - readline=8.2 - - six=1.17.0 - - tk=8.6.13 - - tornado=6.4.2 - - tzdata=2024b - - wayland=1.23.1 - - xcb-util=0.4.1 - - xcb-util-cursor=0.1.5 - - xcb-util-image=0.4.0 - - xcb-util-keysyms=0.4.1 - - xcb-util-renderutil=0.3.10 - - xcb-util-wm=0.4.2 - - xkeyboard-config=2.43 - - xorg-libice=1.1.1 - - xorg-libsm=1.2.4 - - xorg-libx11=1.8.10 - - xorg-libxau=1.0.11 - - xorg-libxcomposite=0.4.6 - - xorg-libxcursor=1.2.3 - - xorg-libxdamage=1.1.6 - - xorg-libxdmcp=1.1.5 - - xorg-libxext=1.3.6 - - xorg-libxfixes=6.0.1 - - xorg-libxi=1.8.2 - - xorg-libxrandr=1.5.4 - - xorg-libxrender=0.9.11 - - xorg-libxtst=1.2.5 - - xorg-libxxf86vm=1.1.5 - - zstd=1.5.6 -name: calkit-example-basic diff --git a/environment.yml b/environment.yml index 32a7350..9d25780 100644 --- a/environment.yml +++ b/environment.yml @@ -2,7 +2,7 @@ name: calkit-example-basic channels: - conda-forge dependencies: - - python + - python=3.12 - pandas - matplotlib - numpy diff --git a/paper/paper.tex b/paper/paper.tex index d000666..7790868 100644 --- a/paper/paper.tex +++ b/paper/paper.tex @@ -38,6 +38,8 @@ \section{Section 2} This is the second section of the paper. +This is another sentence in the second section. + %--/Paper-- \end{document}