{"id":24643860,"url":"https://github.com/soapy1/dof","last_synced_at":"2026-02-14T01:31:23.176Z","repository":{"id":273960179,"uuid":"921452281","full_name":"Quansight/dof","owner":"Quansight","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-21T03:28:55.000Z","size":79,"stargazers_count":0,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-19T20:17:18.712Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Quansight.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-24T01:10:15.000Z","updated_at":"2025-02-21T03:28:59.000Z","dependencies_parsed_at":"2025-01-24T02:22:37.376Z","dependency_job_id":"e38e75e5-897a-48f4-bdf4-f1cf70b91263","html_url":"https://github.com/Quansight/dof","commit_stats":null,"previous_names":["soapy1/dof","quansight/dof"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quansight%2Fdof","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quansight%2Fdof/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quansight%2Fdof/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Quansight%2Fdof/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Quansight","download_url":"https://codeload.github.com/Quansight/dof/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244622650,"owners_count":20482983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-25T13:15:12.033Z","updated_at":"2026-02-14T01:31:18.140Z","avatar_url":"https://github.com/Quansight.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dept. of Forestry\n\nGoal of this demo project is to showcase:\n* checkpointing environments\n* pushing/pulling environments (at certain checkpoints)\n\n## Dev env\n\nTo setup your dev env, create a conda env\n\n```\n$ conda env create -f environment.yml \n\n$ conda activate dof-dev\n```\n\n## Try it out\n\n### `dof checkpoint`\nThis command will checkpoint your environment. That is, take a snapshot of\nwhat is currently installed so that you can go back to it at any time.\n\n```\n$ dof checkpoint save\n```\n\nTo list all the current available checkpoints run\n\n```\n$ dof checkpoint list\n```\n\nTo see all the changes to the environment since your last checkpoint\n\n```\n$ dof checkpoint diff --rev \u003crevision uuid\u003e\n```\n\nTo see all the packages in an environment\n\n```\n $ dof checkpoint show --rev \u003crevision uuid\u003e \n ```\n\n#### Example\n\nStart with the `dof-dev` environment\n```\n$ conda env create -f environment.yml \n. . .\n$ conda activate dof-dev\n\n# ensure dof is installed\n$ python -m pip install -e .\n```\n\nNow, try to create some checkpoints and install some packages\n```bash\n# createa a checkpoint\n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint save  \n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint list              \n                                                 Checkpoints                                                  \n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ uuid                             ┃ tags                                 ┃ timestamp                        ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ 1bc3a3a434454437a9f72061672b8189 │ ['1bc3a3a434454437a9f72061672b8189'] │ 2025-01-25 00:00:07.707080+00:00 │\n└──────────────────────────────────┴──────────────────────────────────────┴──────────────────────────────────┘\n\n# install a new package\n(dof-dev) sophia:dof/ (main✗) $ conda install jinja2  \n\n# check the diff\n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint diff --rev 1bc3a3a434454437a9f72061672b8189            \ndiff with rev 1bc3a3a434454437a9f72061672b8189\n+ url='https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda'\n+ url='https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda'\n\n# save a new checkpoint\n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint save \n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint list     \n                                                 Checkpoints                                                  \n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ uuid                             ┃ tags                                 ┃ timestamp                        ┃\n┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ d1256c34d93c48eb96ccfb125c598ffe │ ['d1256c34d93c48eb96ccfb125c598ffe'] │ 2025-01-25 00:02:44.065559+00:00 │\n│ 1bc3a3a434454437a9f72061672b8189 │ ['1bc3a3a434454437a9f72061672b8189'] │ 2025-01-25 00:00:07.707080+00:00 │\n└──────────────────────────────────┴──────────────────────────────────────┴──────────────────────────────────┘\n\n# try to install a pip package\n(dof-dev) sophia:dof/ (main✗) $ python -m pip install blinker\n\n# check the diff from the last checkpoint\n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint diff --rev d1256c34d93c48eb96ccfb125c598ffe     \ndiff with rev d1256c34d93c48eb96ccfb125c598ffe\n+ name='blinker' version='1.9.0' build='pypi_0' url=None\n\n# check the diff from the first checkpoint\n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint diff --rev 1bc3a3a434454437a9f72061672b8189  \ndiff with rev 1bc3a3a434454437a9f72061672b8189\n+ name='blinker' version='1.9.0' build='pypi_0' url=None\n+ url='https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda'\n+ url='https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda'\n\n# remove a dependency\n(dof-dev) sophia:dof/ (main✗) $ conda uninstall jinja2\n\n# now recheck the diff from the last checkpoint\n(dof-dev) sophia:dof/ (main✗) $ dof checkpoint diff --rev d1256c34d93c48eb96ccfb125c598ffe    \ndiff with rev d1256c34d93c48eb96ccfb125c598ffe\n+ name='blinker' version='1.9.0' build='pypi_0' url=None\n- url='https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda'\n- url='https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.5-pyhd8ed1ab_0.conda'\n```\n\n### pushing and pulling to park\n\n#### setup [park server](https://github.com/soapy1/park)\n\n```bash\n$ git clone https://github.com/soapy1/park.git\n$ cd park\n$ pixi install\n# run the server on port 8000\n$ pixi run dev\n```\n\n#### configure dof\n\nMake sure the park server is running and then set the `PARK_URL` environment variable.\n\n```bash\n$ export PARK_URL=http://localhost:8000\n```\n\n#### push a checkpoint to park\n\nTo push a checkpoint to park, you can use the `dof push` command.\n\n```bash\n$ dof push --target \u003cnamespace\u003e/\u003cenvironment\u003e:\u003ctag\u003e --rev \u003crevision uuid\u003e\n```\n\n#### pull a checkpoint from park\n\nTo pull a checkpoint from park, you can use the `dof pull` command.\n\n```bash\n$ dof pull --target \u003cnamespace\u003e/\u003cenvironment\u003e:\u003ctag\u003e --rev \u003crevision uuid\u003e\n```\n\n#### full example\n\n```bash\n$ dof checkpoint save\n$ dof checkpoint list                                             \n                         Checkpoints                          \n┏━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ uuid     ┃ tags         ┃ timestamp                        ┃\n┡━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ 8e45de08 │ ['8e45de08'] │ 2025-02-04 01:39:19.260525+00:00 │\n└──────────┴──────────────┴──────────────────────────────────┘\n\n\n$ dof push -t sophia/dof-dev:8e45de08 --rev 8e45de08\n\n$ curl http://localhost:8000/sophia                                    \n{\"data\":{\"namespace\":\"sophia\",\"environments\":[\"dof-dev\"]}}  \n\n$ curl http://localhost:8000/sophia/dof-dev       \n{\"data\":{\"namespace\":\"sophia\",\"environment\":\"dof-dev\",\"checkpoints\":[\"8e45de08\"]}}  \n\n$ curl http://localhost:8000/sophia/dof-dev/8e45de08 | jq  --raw-output .data.checkpoint_data\n\n$ dof checkpoint delete --rev 8e45de08\n\n$ dof checkpoint list\n        Checkpoints        \n┏━━━━━━┳━━━━━━┳━━━━━━━━━━━┓\n┃ uuid ┃ tags ┃ timestamp ┃\n┡━━━━━━╇━━━━━━╇━━━━━━━━━━━┩\n└──────┴──────┴───────────┘\n\n\n$ dof pull -t sophia/dof-dev:8e45de08 --rev 8e45de08\n\n$ dof checkpoint list                                               \n                         Checkpoints                          \n┏━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n┃ uuid     ┃ tags         ┃ timestamp                        ┃\n┡━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n│ 8e45de08 │ ['8e45de08'] │ 2025-02-04 01:39:19.260525+00:00 │\n└──────────┴──────────────┴──────────────────────────────────┘\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoapy1%2Fdof","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoapy1%2Fdof","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoapy1%2Fdof/lists"}