{"id":18495794,"url":"https://github.com/sunjay/ci","last_synced_at":"2025-04-08T22:31:57.604Z","repository":{"id":57553004,"uuid":"94392962","full_name":"sunjay/ci","owner":"sunjay","description":"Continuous integration utilities for Rust","archived":false,"fork":false,"pushed_at":"2017-06-15T03:18:13.000Z","size":2,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-23T19:12:01.530Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/sunjay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-15T02:50:36.000Z","updated_at":"2022-08-20T05:47:09.000Z","dependencies_parsed_at":"2022-09-26T18:41:40.150Z","dependency_job_id":null,"html_url":"https://github.com/sunjay/ci","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunjay%2Fci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunjay%2Fci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunjay%2Fci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sunjay%2Fci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sunjay","download_url":"https://codeload.github.com/sunjay/ci/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247767250,"owners_count":20992541,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T13:26:18.507Z","updated_at":"2025-04-08T22:31:53.520Z","avatar_url":"https://github.com/sunjay.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ci\n\nContinuous Integration utilities for Rust\n\n**This package has not been built yet.**\n\nHere's the vision:\n\u003e Instead of all the [insanity] in your CI configurations, why not just have a\n\u003e single command that abstracts away all the details?\n\nYou can run:\n```\nci fmt\nci build\nci test\n```\nand the program will install whatever is necessary and run the commands.\n\nInstead of remembering that the following command tests if the current directory\nis formatted:\n```\ncargo fmt -- --write-mode=diff\n```\nYou can just remember:\n```\nci fmt\n```\nThis will fail the build if the files need to be formatted.\n\nInstead of having to write each individually, you can also group them like so:\n```\nci fmt build test\n```\n\nThese will run in the same order. Dependencies for each won't be installed until\neach command needs them. That means you can ensure that your build won't take\nlonger than necessary.\n\nThe idea is that you install one thing using `cargo install --force ci` and then\nyou can run everything with no issues.\n\nThere are already many tools that do this like travis-cargo and cargo-travis,\nbut this tool should have many benefits over those:\n- more supported platforms (e.g. more than just travis) and tools (rustfmt, code coverage)\n- support for all the coverage providers like codecov, coveralls, etc.\n- automatic install of the latest version of kcov\n- checks to make sure things are not already installed before installing\n- opinionated defaults, but highly configurable\n- everything automatically runs in verbose mode\n\nIdeas for commands:\n- `all` - run everything in a reasonable order\n- `default` or no argument - run the default test script\n  - probably `build`, `test`\n- `build` - just build in verbose mode\n- `test` - test in verbose mode\n- `fmt` - check if rustfmt has been run\n  - aware of rustfmt's recent transition to nightly-only\n- `coverage` - run tests with code coverage\n- `bench` - run benchmarks\n  - benchmark comparision with `cargo-benchcmp`?\n- `codecov` - (run and) upload coverage to Codecov.io\n- `coveralls` - (run and) upload coverage to Coveralls\n- `doc` - build documentation\n\nThere should be a declaritive and easy way to add new things. That is, recoding\nthe same logic for installing dependencies and running commands should not be\nnecessary.\n\nShould be some clear contributing documentation to allow other people to quickly\nand easily add their own commands.\n\nTry to find some way to avoid creating just another tool that people have to\nspend 10 years configuring and tweaking just to get right. This should have\ncertain sets of reasonable defaults that people can just use until they need to\ndo more.\n\nThere should be good enough documentation that when people want to do more, they\ncan.\n\n[insanity]: https://github.com/sunjay/lion/blob/02fe4343a336560a96eedb143030fd3b298a8d44/.travis.yml#L15-L28\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunjay%2Fci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsunjay%2Fci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsunjay%2Fci/lists"}