{"id":13542677,"url":"https://github.com/fbecart/zinoma","last_synced_at":"2025-04-02T10:31:17.433Z","repository":{"id":38206103,"uuid":"261998926","full_name":"fbecart/zinoma","owner":"fbecart","description":"Žinoma - Make your build flow incremental","archived":false,"fork":false,"pushed_at":"2024-03-28T16:47:24.000Z","size":12119,"stargazers_count":25,"open_issues_count":17,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-14T05:58:26.971Z","etag":null,"topics":["build-tool","incremental","parallel","task-runner","watch-mode"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fbecart.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-07T08:51:51.000Z","updated_at":"2024-05-02T06:25:22.871Z","dependencies_parsed_at":"2024-01-16T17:02:20.925Z","dependency_job_id":"5be8dfd4-626a-4d11-b22e-7dfad72ad5d1","html_url":"https://github.com/fbecart/zinoma","commit_stats":{"total_commits":354,"total_committers":4,"mean_commits":88.5,"dds":0.1694915254237288,"last_synced_commit":"ec411cfefae2bf71d2d4bc32341241eb2a3cff7c"},"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbecart%2Fzinoma","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbecart%2Fzinoma/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbecart%2Fzinoma/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fbecart%2Fzinoma/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fbecart","download_url":"https://codeload.github.com/fbecart/zinoma/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246796929,"owners_count":20835468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build-tool","incremental","parallel","task-runner","watch-mode"],"created_at":"2024-08-01T10:01:14.826Z","updated_at":"2025-04-02T10:31:16.637Z","avatar_url":"https://github.com/fbecart.png","language":"Rust","funding_links":[],"categories":["Rust","others"],"sub_categories":[],"readme":"# Žinoma\n\nMake your build flow incremental\n\n[![Crates.io](https://img.shields.io/crates/v/zinoma.svg)](https://crates.io/crates/zinoma)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Build status](https://github.com/fbecart/zinoma/workflows/ci/badge.svg)](https://github.com/fbecart/zinoma/actions)\n\n---\n\n## Why another build tool?\n\nNon-trivial software projects usually combine multiple technologies, each coming with their specific build tool.\nThe development workflows on such projects (e.g. checking code validity, deploying a new version) involve multiple commands that need to be executed in a coordinated way.\n\nRunning these commands manually is prone to errors, as it is easy to forget commands or to run them in the wrong order.\nOn the other hand, using a simple script running all of them systematically is unnecessarily slow.\n\n## Introducing Žinoma\n\nŽinoma provides a simple command line to execute your most common build flows in the most efficient way.\n\nIn particular, Žinoma provides a mechanism to run the tasks incrementally. This means Žinoma will avoid running repetitive tasks again and again if it determines they can be skipped.\n\nIt also handles dependencies between tasks (waiting for the completion of one task before starting another one), and runs tasks in parallel whenever possible.\n\nFinally, Žinoma offers a watch mode, which waits for filesystem updates and re-executes the relevant tasks when source files are updated.\n\n## Installation\n\n### Via Homebrew (for macOS)\n\nPrerequisites:\n\n- [Homebrew](https://brew.sh/)\n\n```shell script\nbrew install fbecart/tap/zinoma\n```\n\n### Via APT (for Debian-based Linux distros)\n\n```shell script\ncurl -SsL https://fbecart.github.io/ppa/debian/KEY.gpg | sudo apt-key add -\nsudo curl -SsL -o /etc/apt/sources.list.d/fbecart.list https://fbecart.github.io/ppa/debian/fbecart.list\nsudo apt update\nsudo apt install zinoma\n```\n\n### Via Cargo (for Linux, Windows or macOS)\n\nPrerequisites:\n\n- [Rust toolchain](https://rustup.rs/)\n\n```shell script\ncargo install zinoma\n```\n\n## Documentation\n\n### YAML syntax for build flows (`zinoma.yml`)\n\nIn order to use Žinoma with your project, you need to create a Yaml file named `zinoma.yml`.\n\nThe full documentation of the expected schema can be found [on this page](https://fbecart.github.io/zinoma/doc/zinoma/config/yaml/schema/struct.Project.html).\n\n### Command line\n\n```shell script\nUSAGE:\n    zinoma [FLAGS] [OPTIONS] [TARGETS]...\n\nARGS:\n    \u003cTARGETS\u003e...    Targets to build\n\nFLAGS:\n        --clean      Start by cleaning the target outputs\n    -h, --help       Prints help information\n    -v               Increases message verbosity\n    -V, --version    Prints version information\n    -w, --watch      Enable watch mode: rebuild targets and restart services on file system changes\n\nOPTIONS:\n    -p, --project \u003cPROJECT_DIR\u003e    Directory of the project to build (in which 'zinoma.yml' is located)\n```\n\n### Additional information\n\n#### Incremental build\n\nThe incremental build is the core feature of Žinoma.\nIt is meant to accelerate considerably your development environment,\nwhile simplifying the execution of your most common build flows.\n\nThe best way to speed up your build flow is simply to avoid running its commands.\nŽinoma helps you do this in a fully automated way.\n\nBuild targets operate on resources (e.g. files), transforming some resources (aka `input`) into other resources (aka `output`).\nBy looking at the resources declared in the `input` and `output` of your targets,\nŽinoma can tell if a target needs to run again, or can be skipped.\n\nŽinoma identifies file updates by looking at their modified timestamp and checksum.\nThis information is stored in the `.zinoma` directory, located next to `zinoma.yml`.\nThis directory should be ignored in your version control.\n\n#### Watch mode (`--watch`)\n\nŽinoma offers a watch mode which can be enabled with the `--watch` option of the command line.\n\nIf the watch mode is enabled, `zinoma` will not exit after the build flow completion.\nInstead, it will keep an eye open on the targets' `input`'s paths and will re-execute the relevant targets in case filesystem changes are detected.\n\n#### Clean flag (`--clean`)\n\nThis flag helps you clean up your build environment.\nIt will delete files specified in your [`output.paths`] and will reinitialize the targets incremental states.\n\n[`output.paths`]: https://fbecart.github.io/zinoma/doc/zinoma/config/yaml/schema/enum.OutputResource.html#variant.Paths.field.paths\n\nIf provided alone, the `--clean` flag will clean up all targets of your build flow.\n\nWhen provided along with targets, the `--clean` flag will only run the cleanup on the specified targets and their dependencies.\n`zinoma` will then proceed to the execution of these targets.\n\n## Example of configuration\n\n`zinoma.yml`:\n\n```yaml\ntargets:\n  node_dependencies:\n    input:\n      - paths: [package.json, package-lock.json]\n    output:\n      - paths: [node_modules]\n    build: npm install\n\n  test:\n    input:\n      - node_dependencies.output\n      - paths: [package.json, src, test]\n    build: npm test\n\n  lint:\n    input:\n      - node_dependencies.output\n      - paths: [package.json]\n      - paths: [src, test]\n        extensions: [js]\n    build: npm run lint\n\n  check:\n    dependencies: [test, lint]\n\n  start:\n    input:\n      - node_dependencies.output\n      - paths: [package.json, src]\n    service: exec npm run start\n\n  build:\n    dependencies: [check]\n    input:\n      - paths:\n        - Dockerfile\n        - package.json\n        - package-lock.json\n        - src\n    output:\n      - paths: [lambda.zip]\n    build: |\n      docker build -t build-my-project:latest .\n      docker create -ti --name build-my-project build-my-project:latest bash\n      docker cp build-my-project:/var/task/lambda.zip ./\n      docker rm -f build-my-project\n```\n\nSome example of commands:\n\n- `zinoma check` will ensure the code complies to the test suites and the coding standards.\n- `zinoma start --watch` will run the application and restart it whenever the sources are updated.\n- `zinoma --clean build` will generate a clean artifact, ready to be deployed.\n\nA fully functional and more advanced example project is available in [fbecart/zinoma-node-example](https://github.com/fbecart/zinoma-node-example).\n\n## Building\n\nŽinoma is written in Rust, so you'll need to grab a [Rust installation](https://rustup.rs/) in order to compile it.\n\nTo build Žinoma:\n\n```shell script\n$ git clone git@github.com:fbecart/zinoma.git\n$ cd zinoma\n$ cargo build --release\n$ ./target/release/zinoma --version\nŽinoma 0.19.0\n```\n\nTo run the test suite, use:\n\n```shell script\ncargo test\n```\n\n## Žinoma for the curious\n\nŽinoma is a Lithuanian word. Pronounce it with a stress on the first syllable, which should sound like the _gi_ of _regime_.\n\nIn Lithuanian, žinoma has two meanings:\n\n- _of course_, when used as an adverb;\n- _known_, when used as an adjective (a reference to the _Not Invented Here Syndrome_).\n\nIt is also a recursive acronym for \"Žinoma Is NOt MAke!\".\n\n## Acknowledgements\n\nThis project started as a fork of [Steve Mostovoy's buildy](https://github.com/Stovoy/buildy).\n\n## License\n\nŽinoma is distributed under the terms of the MIT license.\n\nSee [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffbecart%2Fzinoma","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffbecart%2Fzinoma","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffbecart%2Fzinoma/lists"}