{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":610290102,"defaultBranch":"main","name":"softpack-builder","ownerLogin":"wtsi-hgi","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2023-03-06T13:32:53.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2567468?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1718747840.0","currentOid":""},"activityList":{"items":[{"before":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","after":"4ec9de77820978c3d37266121d83c65b95a7313d","ref":"refs/heads/snyk-fix-a6a94c52845835a31ba567de1628f45e","pushedAt":"2024-06-18T21:57:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sb10","name":"Sendu Bala","path":"/sb10","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/507951?s=80&v=4"},"commit":{"message":"fix: requirements.txt to reduce vulnerabilities\n\n\nThe following vulnerabilities are fixed by pinning transitive dependencies:\n- https://snyk.io/vuln/SNYK-PYTHON-URLLIB3-7267250","shortMessageHtmlLink":"fix: requirements.txt to reduce vulnerabilities"}},{"before":null,"after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/snyk-fix-a6a94c52845835a31ba567de1628f45e","pushedAt":"2024-06-18T21:57:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sb10","name":"Sendu Bala","path":"/sb10","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/507951?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","after":"e2454460d46413ce1609d319cef799756f2c8bdc","ref":"refs/heads/snyk-fix-99b4494404d20457558afce1b80aa88c","pushedAt":"2024-05-21T09:52:53.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sb10","name":"Sendu Bala","path":"/sb10","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/507951?s=80&v=4"},"commit":{"message":"fix: requirements.txt to reduce vulnerabilities\n\n\nThe following vulnerabilities are fixed by pinning transitive dependencies:\n- https://snyk.io/vuln/SNYK-PYTHON-REQUESTS-6928867","shortMessageHtmlLink":"fix: requirements.txt to reduce vulnerabilities"}},{"before":null,"after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/snyk-fix-99b4494404d20457558afce1b80aa88c","pushedAt":"2024-05-21T09:52:52.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sb10","name":"Sendu Bala","path":"/sb10","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/507951?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","after":"e15720793c02d2496431fbfa2cdb0ded3310694e","ref":"refs/heads/snyk-fix-d05c62b830d0918dd29a2f261f6f2974","pushedAt":"2024-05-07T20:50:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sb10","name":"Sendu Bala","path":"/sb10","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/507951?s=80&v=4"},"commit":{"message":"fix: requirements.txt to reduce vulnerabilities\n\n\nThe following vulnerabilities are fixed by pinning transitive dependencies:\n- https://snyk.io/vuln/SNYK-PYTHON-JINJA2-6809379","shortMessageHtmlLink":"fix: requirements.txt to reduce vulnerabilities"}},{"before":null,"after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/snyk-fix-d05c62b830d0918dd29a2f261f6f2974","pushedAt":"2024-05-07T20:50:32.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sb10","name":"Sendu Bala","path":"/sb10","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/507951?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","after":"0023a268533fbee605af14ff8d5d2775e4d17f45","ref":"refs/heads/snyk-fix-9d7b6496165c75e423c51ac50cfc683a","pushedAt":"2024-04-14T20:13:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"sersorrel","name":"ash","path":"/sersorrel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9433472?s=80&v=4"},"commit":{"message":"fix: requirements.txt to reduce vulnerabilities\n\n\nThe following vulnerabilities are fixed by pinning transitive dependencies:\n- https://snyk.io/vuln/SNYK-PYTHON-IDNA-6597975","shortMessageHtmlLink":"fix: requirements.txt to reduce vulnerabilities"}},{"before":null,"after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/snyk-fix-9d7b6496165c75e423c51ac50cfc683a","pushedAt":"2024-04-14T20:13:10.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"sersorrel","name":"ash","path":"/sersorrel","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9433472?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","after":"46b9b8db1f631f285ea6399a5a58a146bb38e295","ref":"refs/heads/snyk-fix-bdcb2f88f0164b18ef5772d5a01840e5","pushedAt":"2024-01-11T14:44:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"fix: requirements.txt to reduce vulnerabilities\n\n\nThe following vulnerabilities are fixed by pinning transitive dependencies:\n- https://snyk.io/vuln/SNYK-PYTHON-JINJA2-6150717","shortMessageHtmlLink":"fix: requirements.txt to reduce vulnerabilities"}},{"before":null,"after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/snyk-fix-bdcb2f88f0164b18ef5772d5a01840e5","pushedAt":"2024-01-11T14:44:35.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","after":"f993f0c377dc9d5030c0e2d8c9e0d536b131590f","ref":"refs/heads/snyk-fix-0c8947ae06d28f066542b4ae56de7acb","pushedAt":"2023-10-19T04:45:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"fix: requirements.txt to reduce vulnerabilities\n\n\nThe following vulnerabilities are fixed by pinning transitive dependencies:\n- https://snyk.io/vuln/SNYK-PYTHON-URLLIB3-6002459","shortMessageHtmlLink":"fix: requirements.txt to reduce vulnerabilities"}},{"before":null,"after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/snyk-fix-0c8947ae06d28f066542b4ae56de7acb","pushedAt":"2023-10-19T04:45:51.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","after":"bb35193437f7cae59541342e7878183e40dd51c4","ref":"refs/heads/snyk-fix-5029dbdaec83dc3d6ab1b059c1e64d97","pushedAt":"2023-10-04T04:57:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"fix: requirements.txt to reduce vulnerabilities\n\n\nThe following vulnerabilities are fixed by pinning transitive dependencies:\n- https://snyk.io/vuln/SNYK-PYTHON-URLLIB3-5926907","shortMessageHtmlLink":"fix: requirements.txt to reduce vulnerabilities"}},{"before":null,"after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/snyk-fix-5029dbdaec83dc3d6ab1b059c1e64d97","pushedAt":"2023-10-04T04:57:02.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"0a7ceb1607dec916150209fb0e7588d992f20bc8","after":"863795e8f52db5ae454a31a945fad925776d1582","ref":"refs/heads/feature/modulefile","pushedAt":"2023-08-20T19:42:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ”ง fix(models.py): rename 'url' attribute to 'address' in VaultConfig class for better clarity and consistency\n\n๐Ÿ”ง fix(settings.py): update reference to 'url' attribute to 'address' in hvac.Client initialization to reflect the change made in VaultConfig class","shortMessageHtmlLink":"๐Ÿ”ง fix(models.py): rename 'url' attribute to 'address' in VaultConfig โ€ฆ"}},{"before":"ee4eea94c8c5919ee32b409b99384c5c8ac3a5fd","after":"0a7ceb1607dec916150209fb0e7588d992f20bc8","ref":"refs/heads/feature/modulefile","pushedAt":"2023-08-20T16:26:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ› fix(spack.py): change type hint for config parameter in Spack.command method from Box to dict[str, str] to match the actual type\n๐Ÿ› fix(spack.py): convert config parameter to Box object in Spack.command method to ensure compatibility with the Command constructor\n๐Ÿ› fix(spack.py): change type hint for spack parameter in Spack.Environment constructor from Box to dict[str, str] to match the actual type","shortMessageHtmlLink":"๐Ÿ› fix(spack.py): change type hint for config parameter in Spack.commaโ€ฆ"}},{"before":null,"after":"ee4eea94c8c5919ee32b409b99384c5c8ac3a5fd","ref":"refs/heads/feature/modulefile","pushedAt":"2023-08-20T16:02:23.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ”ง chore(config.yml): add core service URL to services configuration\n๐Ÿ”ง chore(models.py): add ServicesConfig model to represent services configuration\n๐Ÿ”ง chore(settings.py): add services configuration to Settings model\n๐Ÿ”ง chore(container.py): pass spack config to Container constructor\n๐Ÿ”ง chore(environment.py): pass spack config to Environment constructor\n๐Ÿ”ง chore(modulefile.py): change templates.patterns to templates.specs\n๐Ÿ”ง chore(shell.py): remove unused env attribute from ShellCommand\n๐Ÿ”ง chore(singularity.py): pass spack config to Singularity constructor\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment constructor\n๐Ÿ”ง chore(spack.py): add PATH environment variable to Spack.Command constructor\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.command method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.add method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.concretize method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.build_image method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create_manifest method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to Spack.Environment.create method\n๐Ÿ”ง chore(spack.py): pass spack config to","shortMessageHtmlLink":"๐Ÿ”ง chore(config.yml): add core service URL to services configuration"}},{"before":"1352bc1c329e17fb90345568c84a65829ea78727","after":"43414f25631858dd2f857d1034eaa68a10881445","ref":"refs/heads/develop","pushedAt":"2023-07-24T17:30:28.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"Merge branch 'main' into develop","shortMessageHtmlLink":"Merge branch 'main' into develop"}},{"before":"dc6e89d7ad3cabeedcd87044a62e857a95138995","after":"1352bc1c329e17fb90345568c84a65829ea78727","ref":"refs/heads/develop","pushedAt":"2023-07-24T17:27:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":":sparkles: Add package creation with dependencies #16 (#17)","shortMessageHtmlLink":"โœจ Add package creation with dependencies #16 (#17)"}},{"before":null,"after":"3d8f50fa06c3fe8ca26f00141f28632e66b3c535","ref":"refs/heads/feature/create-package","pushedAt":"2023-07-24T17:23:13.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":":sparkles: Add package creation with dependencies #16","shortMessageHtmlLink":"โœจ Add package creation with dependencies #16"}},{"before":"97b776540fcafeceb3e822f162268fa46e91cd36","after":"dc6e89d7ad3cabeedcd87044a62e857a95138995","ref":"refs/heads/develop","pushedAt":"2023-06-20T21:33:36.055Z","pushType":"push","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ“ docs: add new documentation files for getting started tutorial and how to start a build guide\n๐Ÿ”€ chore(mkdocs.yml): update navigation structure to include new documentation files","shortMessageHtmlLink":"๐Ÿ“ docs: add new documentation files for getting started tutorial and โ€ฆ"}},{"before":"c752def502003b7537098546ddd7bc950ef5c0cc","after":"97b776540fcafeceb3e822f162268fa46e91cd36","ref":"refs/heads/develop","pushedAt":"2023-06-20T21:22:45.608Z","pushType":"push","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ“ docs(CONTRIBUTING.md): update instructions to install dependencies using poetry\n๐Ÿ“ docs(CONTRIBUTING.md): remove Python 3.8 from the list of supported versions since it's not supported anymore","shortMessageHtmlLink":"๐Ÿ“ docs(CONTRIBUTING.md): update instructions to install dependencies โ€ฆ"}},{"before":null,"after":"e34a07179b1180bd08f9afda1ea908b62fd5deed","ref":"refs/heads/gh-pages","pushedAt":"2023-06-20T16:11:08.679Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"deploy: 2c321a9bed2c4f0b79bc4099c44511fa901c83f5","shortMessageHtmlLink":"deploy: 2c321a9"}},{"before":"20ffc92d8bd426ddf07be2211c5fbc18d616f82b","after":null,"ref":"refs/tags/0.1.0","pushedAt":"2023-06-20T15:36:50.860Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"}},{"before":"20ffc92d8bd426ddf07be2211c5fbc18d616f82b","after":"2c321a9bed2c4f0b79bc4099c44511fa901c83f5","ref":"refs/heads/main","pushedAt":"2023-06-20T15:36:22.809Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"},"commit":{"message":"๐Ÿ”€ merge from develop (#14)\n\n* :sparkles: add simulated build\r\n\r\n* add logging to simulated build\r\n\r\n* :sparkles: add environment REST API\r\n\r\n* :memo: updating inline docs\r\n\r\n* :wrench: update spack runtime config\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): fix formatting and add missing dependencies\r\nโœจ feat(pyproject.toml): add fastapi dependency\r\n\r\n๐Ÿ› fix(pyproject.toml): add disallow_untyped_calls and disallow_untyped_defs to mypy configuration\r\n\r\n๐Ÿ› fix(cli.py): add return type hints to service() and main() functions\r\nโœจ feat(config.yml): change server port from 8000 to 7080\r\nโœจ feat(config.py): add manifest field to SpackConfig model and change config file path to ~/.softpack/builder/\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to methods and arguments\r\nโœจ feat(environment.py): add support for Spack environment commands\r\n๐Ÿš€ perf(environment.py): improve build method to fail fast\r\n๐Ÿ› fix(environment.py): fix environment_instantiate argument type\r\n\r\n๐Ÿ”ง chore(environment.py): add type hints to function arguments and return types\r\n\r\n๐Ÿ› fix(utils.py): add type hints to async_exec function arguments and return value\r\n๐Ÿ—‘๏ธ chore(test_softpack_builder.py): delete unused test file and fixture\r\n\r\n* ๐Ÿ› fix(app.py): add missing import for __version__ and add ServiceStatus class and root endpoint\r\nโœจ feat(environment.py): add type ignore comments to env variable and async_exec function call\r\n\r\nโœ… test(test_app.py): add test for HTTP GET request to root route\r\n\r\n* ๐Ÿ”ง chore(config): update ORAS model to allow optional username, token, and uri fields\r\n๐Ÿ”ง chore(config): update SpackConfig model to allow optional manifest field\r\n\r\n* ๐Ÿš€ feat(pyproject.toml): add essential-generators package\r\n๐Ÿ”ฅ chore(utils.py): remove async_exec function\r\nโ™ป๏ธ refactor(environment.py): use a wrapper function for environment_create_flow in background task\r\n๐Ÿ”ง chore(tox.ini): add tests directory to autoflake and isort commands\r\n\r\n* ๐Ÿ› fix(config.py): assign path variable before returning in classmethod\r\nโœจ feat(environment.py): make flow_wrapper async function\r\n\r\n* โœ… test(test_environment.py): add test for environment flow and env model creation\r\n\r\n* ๐Ÿš€ chore(dev.yml): rename workflow from 'dev workflow' to 'tests'\r\n๐Ÿ“ docs(README.md): add badges for issue resolution time and percentage of open issues\r\n\r\n๐Ÿ”ง chore(pyproject.toml): reformat dependencies section for better readability\r\n\r\n๐Ÿ“ฆ chore(pyproject.toml): add sqlalchemy and singleton-decorator dependencies\r\n๐Ÿ”ง chore(pyproject.toml): update softpack-builder script path\r\n๐Ÿ”ง chore(pyproject.toml): add pytest-asyncio, pytest-cases, and pytest-httpx to test extras\r\n๐Ÿ”ง chore(pyproject.toml): add filterwarnings option to pytest.ini_options section\r\n\r\n๐Ÿš€ feat(app.py): add Application class as a singleton to manage FastAPI application and Typer commands\r\n๐Ÿ”ง chore(app.py): refactor ServiceStatus to a dictionary\r\n๐Ÿ”ง chore(app.py): refactor root() to return a dictionary instead of ServiceStatus object\r\n๐Ÿš€ feat(app.py): add register_module() method to register a module with the application\r\n๐Ÿš€ feat(app.py): add url() method to get absolute URL path\r\n๐Ÿš€ feat(app.py): add main() method as the main command line entrypoint\r\n\r\n๐Ÿ”ฅ chore(cli.py): remove unused code\r\n๐Ÿ”ง chore(config.py): remove unused settings variable and method\r\n\r\n๐ŸŽ‰ feat(deployments.py): add Deployments class for building and running deployments\r\n\r\n๐Ÿš€ feat(environment.py): add delay_task function for testing purposes\r\n๐Ÿ”ง chore(environment.py): refactor Environment.Model to include from_yaml and asdict methods\r\n\r\n๐Ÿš€ feat(environment.py): add stage, create_manifest, and build methods to Environment class\r\n\r\n๐Ÿ”ง chore(environment.py): refactor create_environment_flow to use Prefect tasks and add delay_task to each task\r\n\r\n๐ŸŽ‰ feat(main.py): add SoftPack Builder main entrypoint\r\n๐Ÿš€ feat(service.py): add Service module with run command to start the SoftPack Builder REST API service\r\n\r\n๐Ÿ†• feat(conftest.py): add fixtures for TestClient, CLI, and service factory and service runners.\r\n\r\n๐Ÿšจ test(test_app.py): fix test_root, test_openapi_docs, and test_openapi_redoc tests to use httpx instead of requests\r\nโœจ feat(test_app.py): add test_register_module test to check if module is registered correctly in the application\r\n\r\n๐Ÿ†• test(test_deployments.py): add tests for Deployments class and its methods\r\n\r\n๐Ÿ”ง chore(test_environment.py): refactor test_environment_create_api to use a parameterized test\r\n๐Ÿš€ feat(test_environment.py): add test_environment_create_command to test environment creation via CLI\r\n\r\n๐Ÿšจ fix(tests): fix flake8 errors in test_main.py\r\nโœ… test(service.py): add test for service run\r\n๐Ÿšจ fix(tox.ini): ignore D101, D102, D103, D107 in flake8 tests for tests directory\r\n\r\n* :sparkles: implement flow deployments\r\n\r\n* :package: update poetry lock file\r\n\r\n* ๐Ÿ› fix(test_main.py): use pytest.raises context manager instead of try-except block in test_main function\r\n\r\n* ๐Ÿš€ chore(dev.yml): add Spack installation and create config file step to dev workflow\r\nโœ… test(conftest.py): add fixture for running Prefect agent and add specs for Argon and Zirconium projects\r\n\r\n๐Ÿ› fix(test_environment.py): add create_environment import\r\nโœจ feat(test_environment.py): add test_environment_create_flow test\r\n๐Ÿ”ง chore(tox.ini): add concurrency option to coverage run section\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job (#6)\r\n\r\n* ๐Ÿ› fix(dev.yml): change 'repo' to 'repository' in 'Install Spack' job configuration\r\n\r\n* ๐Ÿ”ง chore(dev.yml): update branch names in workflow trigger to only use 'main' and 'develop' branches\r\n\r\n* ๐Ÿ”ง chore(dev.yml): refactor Create config file step to use environment variables for better readability and maintainability\r\n\r\n* ๐Ÿ› fix(dev.yml): use env variable in CONFIG_FILE instead of hardcoding it\r\n\r\n* ๐Ÿ› fix(dev.yml): change env variable from env.CONFIG_PATH to vars.CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): fix typo in CONFIG_FILE variable assignment\r\n๐Ÿ”ง chore(dev.yml): change CONFIG_FILE path to be relative to CONFIG_PATH\r\n\r\n* ๐Ÿ› fix(dev.yml): update SPACK_COMMAND to use $GITHUB_WORKSPACE to locate spack binary\r\n๐Ÿ” chore(dev.yml): add debugging information to the job\r\n\r\n* ๐Ÿ› fix(dev.yml): remove SPACK_COMMAND environment variable and use direct path to spack command instead\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to relative path\r\nโœจ feat(dev.yml): add debug information to script\r\n\r\n* ๐Ÿ› fix(dev.yml): change path to config file to use HOME environment variable\r\n\r\n* ๐Ÿ› fix(dev.yml): change CONFIG_PATH to $HOME/.softpack/builder\r\n๐Ÿ”ง chore(dev.yml): remove unnecessary echo, pwd, ls, and cat commands\r\n\r\n* merge feature/singularity (#7)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* merge from feature/singularity (#8)\r\n\r\n* ๐Ÿ”ง chore(config): add SingularityConfig model to Settings\r\n๐Ÿ”ง chore(deployments): change default deployment name to include flow name\r\n\r\n๐Ÿš€ feat(environment.py): add Manifest class to handle Spack manifest files\r\n๐Ÿ”ง chore(environment.py): add owner field to Environment data model\r\n๐Ÿ”ง chore(environment.py): change typing import to include Callable and cast\r\n๐Ÿ”ง chore(environment.py): change task import to Task and add FlowRunContext import\r\n๐Ÿ”ง chore(environment.py): change DaskTaskRunner import to use prefect_dask.task_runners\r\n๐Ÿ”ง chore(environment.py): change ShellOperation import to use prefect_shell\r\n๐Ÿ”ง chore(environment.py): change BaseModel import to use pydantic\r\n๐Ÿ”ง chore(environment.py): change list[str] to List[str] in Environment data model\r\n๐Ÿ”ง chore(environment.py): change dataclasses import to use dataclass decorator\r\n๐Ÿ”ง chore(environment.py): change Path import to use pathlib.Path\r\n๐Ÿ› fix(environment.py): fix from_yaml method to use self.filename instead of filename argument\r\n๐Ÿ›\r\n\r\n๐Ÿ”จ refactor(environment.py): refactor Environment class to use Box for filenames and add task method\r\n๐Ÿš€ chore(environment.py): add task_run_name to Prefect task for better logging\r\n๐Ÿ› fix(environment.py): pass kwargs to ShellOperation and spack_command methods\r\n\r\n๐Ÿ”จ refactor(environment.py): extract singularity_command method from Environment class\r\nโœจ feat(environment.py): add create_container_definition method to create Spack manifest and Singularity definition\r\n\r\n๐Ÿš€ feat(environment.py): add create_container_definition task to create container definition\r\n๐Ÿ‘ท chore(environment.py): use Environment.task decorator instead of @task() decorator\r\n๐Ÿ‘ท chore(environment.py): use cast() to cast the return value of the task functions\r\n๐Ÿ‘ท chore(environment.py): return FlowRunContext dictionary from create_environment function\r\n\r\n๐Ÿ”€ chore(tests, tox): merge changes from branch 'guest' to 'main'\r\n๐Ÿ‘ฅ chore(specs): add owner field to argon and zirconium projects\r\n๐Ÿ”ง chore(tox): update envlist to include python 3.9 and remove python 3.8 from gh-actions configuration\r\n\r\n* ๐Ÿš€ chore(config.yml): update spack version to v0.19.1\r\n๐Ÿ› fix(environment.py): add --fakeroot flag to build command and convert filenames to strings\r\n\r\n* ๐Ÿ”ง chore(config.yml): add os_packages to container config\r\nโœจ feat(config.yml): add strip option to container config\r\nโœจ feat(config.yml): add concretizer.unify option to config view\r\n\r\n๐Ÿ› fix(environment.py): replace dictionary with Box object to allow attribute access\r\n๐Ÿ”ฅ chore(environment.py): remove unused from_yaml method\r\nโœจ feat(environment.py): use Box object to patch manifest and dump to file\r\n\r\n๐Ÿ”จ refactor(environment.py): change return type of create_manifest, concretize and build methods to Environment\r\nโœจ feat(environment.py): add concretize method to Environment class\r\n๐Ÿณ chore(environment.py): rename create_container_definition method to containerize in Environment class\r\n\r\n๐Ÿš€ chore(environment.py): refactor create_environment function to use a list of tasks instead of individual tasks\r\n๐Ÿ› fix(environment.py): rename create_container_definition task to containerize_environment\r\nโœจ feat(environment.py): add concretize_environment task to concretize an environment before containerizing it\r\nโœจ feat(environment.py): add containerize_environment task to containerize an environment\r\nโœจ feat(environment.py): add build_environment task to build an environment\r\n\r\n* ๐Ÿ”ง chore(dev.yml): add steps to install Singularity and run code coverage with codecov-action\r\n\r\n* ๐Ÿ”™ revert(dev.yml): downgrade Singularity version to 3.8.7\r\n\r\n* :wrench: updated spack config\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack reference to commit 6aa4c29119\r\n๐Ÿ› fix(config.yml): add missing dependencies for spack build\r\n๐Ÿ› fix(environment.py): fix logger initialization and spack command path\r\n\r\n* ๐Ÿ”€ chore(dev.yml): update spack repository reference to commit 0707ffd4e466402bf19dff1add59eaf2b6d9154e\r\nโœ… test(dev.yml): run tests using poetry run tox instead of tox directly\r\n\r\n* โœจ feat(config.yml): add support for environment path and spack config\r\n๐Ÿ› fix(environment.py): fix ImageSpec constructor arguments\r\nโœจ feat(environment.py): add ImageSpec abstract class and BuildSpec and FinalSpec subclasses\r\nโœจ feat(environment.py): add patch_manifest method to Environment class\r\nโœจ feat(environment.py): add containerize method to Environment class\r\nโœจ feat(environment.py): add build method to Environment class\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add EnvironmentConfig class to SpackConfig\r\nโœจ feat(environment.py): add Environment classmethod to create Environment from model\r\nโœจ feat(environment.py): add environment path to Environment constructor\r\nโœจ feat(environment.py): add path attribute to Environment class\r\nโœจ feat(environment.py): add patch method to BuildSpec\r\nโœจ feat(environment.py): add patch method to FinalSpec\r\nโœจ feat(environment.py): add args method to Build\r\n\r\n* ๐Ÿ”ง chore(makefile): remove tests directory from mypy command\r\n๐Ÿ”ง chore(config.yml): rename spack.environment to spack.environments\r\n๐Ÿ”ง chore(environment.py): change --directory to --bind and remove --allow-root and --force options\r\n๐Ÿ”ง chore(environment.py): change logger type to LoggerAdapter\r\n๐Ÿ”ง chore(test_environment.py): add settings fixture and change create_environment call to use Box\r\n\r\n* ๐Ÿ› fix(conftest.py): use Path instead of str for environments path\r\n๐Ÿ› fix(conftest.py): use tempfile.mkdtemp instead of TemporaryDirectory\r\n๐Ÿ› fix(test_environment.py): reduce PREFECT_AGENT_TIMEOUT to 5 seconds\r\nโœจ feat(test_environment.py): add prefect_agent fixture to join threads\r\nโœจ feat(test_environment.py): add capsys fixture to capture stdout and stderr\r\n\r\n* ๐Ÿšจ fix(test_environment.py): remove unused fixture 'prefect_agent' and commented out code\r\nโœจ feat(test_environment.py): remove unused fixture 'prefect_agent' from test signature\r\n\r\n* ๐Ÿš€ feat(dev.yml): add step to install Spack templates\r\n๐Ÿ› fix(conftest.py): use tmpdir fixture instead of tempfile to create temporary directory\r\n๐Ÿ› fix(conftest.py): set path attribute of Environment.settings.spack.environments to Path object\r\n๐Ÿš€ feat(conftest.py): add Spack templates directory to Environment.settings.spack.manifest.spack.config.template_dirs\r\n๐Ÿ› fix(test_environment.py): remove unused settings fixture from test_environment_create_flow() function signature\r\n\r\n* ๐Ÿ” chore(dev.yml): add temporary files debug step to show workspace and spack-templates directory contents\r\n\r\n* ๐Ÿ”ง chore(dev.yml): create Spack config file and show its content\r\n๐Ÿ”ง chore(environment.py): remove settings attribute from Environment class and pass it as an argument to Manifest.patch() method\r\n๐Ÿ”ง chore(conftest.py): refactor fixture to patch app settings instead of Environment settings\r\n\r\n* ๐Ÿš€ chore(dev.yml): update spack-templates repository to wtsi-hgi/spack-templates\r\n๐Ÿ”’ chore(dev.yml): create GPG key for softpack\r\n๐Ÿ”ง chore(config.yml): remove unused spack config options\r\n๐Ÿ”ง chore(config.yml): change spack cache and environments paths to /tmp\r\n๐Ÿ”ง chore(config.yml): add bind mount for spack cache and GPG key in Singularity build\r\n๐Ÿ”ง chore(environment.py): change spack environments path to /tmp\r\n๐Ÿ”ง chore(tests/conftest.py): change spack environments and cache paths to /tmp\r\n๐Ÿ”ง chore(tests/data/specs): remove argon.yml and zirconium.yml, add test-env.yml\r\n๐Ÿ”ง chore(tests/test_environment.py): increase Prefect agent timeout to 300 seconds\r\n\r\n* ๐Ÿ” chore(dev.yml): add debug logs to check .gpg directory\r\nโœจ feat(tox.ini): add verbose flag to pytest command\r\n\r\n* ๐Ÿš€ chore(dev.yml): add test for GPG directory configuration\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove TEST GPG DIR step\r\n๐Ÿ”’ chore(dev.yml): set SPACK_GNUPGHOME environment variable in Create GPG key step\r\n\r\n* ๐Ÿš€ chore(dev.yml): add optional input to enable tmate debugging in manually-triggered workflows\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove tmate debugging step from dev workflow\r\n๐Ÿ› fix(dev.yml): add which command to show singularity location in Spack config step\r\nโœจ feat(dev.yml): add tmate debugging step to dev workflow when manually triggered with debug_enabled input\r\n\r\n* ๐Ÿ› fix(config.yml): use $HOME instead of tilde (~) to reference user's home directory in bind option\r\n\r\n* ๐Ÿ”ฅ chore(dev.yml): remove Spack config display step\r\nโœจ feat(dev.yml): add code coverage step using codecov-action\r\n\r\n* ๐Ÿ”ฅ chore(tox.ini): remove verbose flag from pytest command\r\n\r\n* ๐Ÿ”ฅ refactor(environment.py): move settings attribute to the top of the class\r\n๐Ÿ› fix(environment.py): remove redundant settings attribute assignment in __init__ method\r\n\r\n* ๐Ÿ› fix(environment.py): fix logger initialization in init_logger method\r\n๐Ÿ› fix(test_environment.py): fix test_environment_logger test case to properly test logger initialization\r\n\r\n* ๐Ÿ› fix(environment.py): add exist_ok=True to mkdir method\r\n๐Ÿงช test(environment.py): add cleanup of created directory after test\r\n\r\n* ๐Ÿ”ง chore(pyproject.toml): update python version to >=3.9,<4.0\r\n๐Ÿ”ง chore(pyproject.toml): remove python version 3.8 from classifiers\r\n๐Ÿ”ง chore(pyproject.toml): remove target-version py38 from black configuration\r\n๐Ÿ”ง chore(environment.py): update docstring for from_model method\r\n๐Ÿ”ง chore(test_environment.py): update create_environment call to use Box\r\n๐Ÿ”ง chore(test_environment.py): remove unused PREFECT_AGENT_TIMEOUT variable\r\n๐Ÿ”ง chore(test_environment.py): update logger test to trigger exception\r\n\r\n* :sparkles: add artifacts support (#9)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* merge from feature/artifacts (#10)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* merge from feature/artifacts (#11)\r\n\r\n* :sparkles: add artifacts support\r\n\r\ninitial support for adding adding artifacts and pushing images to container registries\r\n\r\n* ๐Ÿ“ฆ chore(deps): add mergedeep to pyproject.toml\r\n๐Ÿ“ฆ chore(deps): add semver to pyproject.toml\r\n๐Ÿ“ฆ chore(tox): use poetry to manage dependencies\r\n๐Ÿ“ฆ chore(tox): add commands_pre to install dependencies before running commands in tox.ini\r\n\r\n* ๐Ÿ› fix(models.py): make VaultConfig fields optional\r\n๐Ÿ› fix(settings.py): catch KeyError when trying to read vault config from file and print to stderr\r\n\r\n* ๐Ÿ”ง chore(README.md): use --with instead of -E to install poetry environments\r\n๐Ÿ”ง chore(softpack_builder): rename register_module to register_serializer in all files\r\n\r\n* ๐Ÿ› fix(app.py): change datetime format to string to avoid serialization issues\r\n๐Ÿ› fix(artifacts.py): fix typo in variable name from registry to registry\r\n๐Ÿ”จ refactor(models.py): capitalize first letter of class docstring\r\n๐Ÿ”จ refactor(settings.py): rename config_dir to default_config_dir and add user_config_dir to improve semantics. Also remove unused imports.\r\n\r\n* ๐Ÿ”ฅ refactor(spack.py): remove unused buildcache create command and directory argument\r\n๐Ÿš€ feat(spack.py): add push command to buildcache to upload package to remote cache server using the hostname of the current machine\r\n\r\n* ๐Ÿ“ docs(spack.py): update docstring of env_buildcache method to reflect its functionality\r\n๐Ÿš€ feat(spack.py): add support for pushing build cache for a package using the command method\r\n\r\n* ๐Ÿ†• chore(requirements.txt): add new dependencies to the project to improve functionality and security\r\n\r\n* ๐Ÿ“ chore(api.py, app.py, artifacts.py, models.py, settings.py, container.py, deployments.py, environment.py, logger.py, main.py, modulefile.py, serializable.py, service.py, shell.py, singularity.py, spack.py, url.py): update license year and organization name in all files\r\n\r\n* ๐Ÿ“ chore(preview.yml): remove redundant 'workflow' from name and description\r\n๐Ÿ“ chore(release.yml): remove redundant 'workflow' from name and description\r\n\r\n* merge from feature/debug (#13)\r\n\r\n* ๐ŸŽ‰ feat(debug.yml): add debug workflow to run build with tmate debugging enabled on feature/debug branch and workflow_dispatch event. Add steps to get version from tag, checkout repo, and get changelog entry.\r\n\r\n* ๐Ÿ”ฅ chore(debug.yml): remove debug workflow file\r\n๐Ÿ”จ refactor(dev.yml): remove CODECOV_TOKEN secret from codecov-action\r\n๐Ÿš€ chore(release.yml): update changelog builder action to mikepenz/release-changelog-builder-action@v3.2.0 and remove changelog-reader-action. Update github_token input for peaceiris/actions-gh-pages@v3.","shortMessageHtmlLink":"๐Ÿ”€ merge from develop (#14)"}},{"before":"58a7117f98f2103160c9243c1029de8a041da098","after":null,"ref":"refs/heads/feature/asyncio","pushedAt":"2023-06-20T15:32:45.764Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"}},{"before":"e0011779b80c53ecb74cd6f39dd12e4800454d60","after":null,"ref":"refs/heads/feature/singularity","pushedAt":"2023-06-20T15:32:41.688Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"}},{"before":"9b8868418965235e42ba33e88786dee15130093d","after":null,"ref":"refs/heads/feature/artifacts","pushedAt":"2023-06-20T15:32:31.569Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"}},{"before":"1ce576e76c48c30a0e8574a8e34afd6ab3ca00b2","after":null,"ref":"refs/heads/feature/debug","pushedAt":"2023-06-20T15:32:26.010Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"}},{"before":"20ffc92d8bd426ddf07be2211c5fbc18d616f82b","after":null,"ref":"refs/heads/release/0.1.0","pushedAt":"2023-06-20T15:32:18.039Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"altaf-ali","name":"Altaf Ali","path":"/altaf-ali","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/7231912?s=80&v=4"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEaO6nrwA","startCursor":null,"endCursor":null}},"title":"Activity ยท wtsi-hgi/softpack-builder"}