{"id":25776976,"url":"https://github.com/skippy-io/skippy","last_synced_at":"2025-02-27T06:07:05.988Z","repository":{"id":209024467,"uuid":"723033940","full_name":"skippy-io/skippy","owner":"skippy-io","description":"Mono-repo for all Skippy projects.","archived":false,"fork":false,"pushed_at":"2024-10-21T00:16:12.000Z","size":760,"stargazers_count":15,"open_issues_count":8,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-22T14:39:52.607Z","etag":null,"topics":["developer-experience","developer-productivity","gradle","java","junit4","junit5","jvm","maven","predictive-test-selection","regression-test-selection","test-impact-analysis"],"latest_commit_sha":null,"homepage":"https://www.skippy.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skippy-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-24T14:19:17.000Z","updated_at":"2024-10-21T00:02:16.000Z","dependencies_parsed_at":"2024-10-21T00:25:09.730Z","dependency_job_id":null,"html_url":"https://github.com/skippy-io/skippy","commit_stats":null,"previous_names":["skippy-io/skippy"],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skippy-io%2Fskippy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skippy-io%2Fskippy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skippy-io%2Fskippy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skippy-io%2Fskippy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skippy-io","download_url":"https://codeload.github.com/skippy-io/skippy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240987435,"owners_count":19889335,"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":["developer-experience","developer-productivity","gradle","java","junit4","junit5","jvm","maven","predictive-test-selection","regression-test-selection","test-impact-analysis"],"created_at":"2025-02-27T06:01:33.678Z","updated_at":"2025-02-27T06:07:05.980Z","avatar_url":"https://github.com/skippy-io.png","language":"Java","funding_links":[],"categories":["测试"],"sub_categories":[],"readme":"![Skippy](https://avatars.githubusercontent.com/u/150977247?s=100\u0026u=6f4eb4ad99fb667b1bfaf988d3d396bd892fdf16\u0026v=4)\n\n# skippy\n\nMono-repo for all Skippy projects.\n\n## What is it?\n\nSkippy is a Test Impact Analysis \u0026 Predictive Test Selection framework for Java and the JVM. It cuts down on unnecessary testing\nand flakiness without compromising the integrity of your builds. You can run it from the command line, your favorite IDE\nand continuous integration server. Skippy supports Gradle, Maven, JUnit 4 and JUnit 5.\n\nSkippy is specifically designed to prevent regressions in your codebase.\nIt supports all types of tests where the tests and the code under test run in the same JVM.\nIt is best suited for deterministic tests, even those prone to occasional flakiness.\nIt provides the most value for test suites that are either slow or flaky (regardless of whether the test suite contains unit, integration, or functional tests).\n\n[![Skippy.io in 3 minutes](skippy-in-3-mins.png)](http://www.youtube.com/watch?v=VZ_MmQI0mOA \"Skippy.io in 3 minutes\")\n\n## What is it not?\n\nSkippy is not designed for tests that assert the overall health of a system. Don't use it for tests you want to fail\nin response to misbehaving services, infrastructure issues, etc.\n\n## Highlights\n\n- Support for Gradle \u0026 Maven\n- Support for JUnit 4 \u0026 JUnit 5\n- Lightweight: Use it from the command line, your favorite IDE and CI server\n- Non-invasive: Use it for a single test, your entire suite and anything in-between\n- Free of lock-in: You can go back to a \"run everything\" approach at any time\n- Open Source under Apache 2 License\n\n## Getting Started\n\nThe best way to get started are the [Introductory Tutorials](https://www.skippy.io/tutorials). From there, a good next\nstep is the [Reference Documentation](https://www.skippy.io/docs).\n\n## Teaser\n\nLet's take a whirlwind tour of Skippy, Gradle \u0026 JUnit 5. The concepts are similar for Maven \u0026 JUnit 4.\n\n### Step 1: Install Skippy\n\n```groovy\n     plugins {\n+        id 'io.skippy' version '0.0.24'\n     }\n    \n     dependencies {\n+        testImplementation 'io.skippy:skippy-junit5:0.0.24'\n     }\n```\n\n### Step 2: Enable Predictive Test Selection\n\nAnnotate the test you want to optimize with `@PredictWithSkippy`:\n\n```java\n+    import io.skippy.junit5.PredictWithSkippy;\n\n+    @PredictWithSkippy\n     public class FooTest {     \n\n         @Test\n         public void testFoo() {\n             assertEquals(\"foo\", Foo.getFoo());\n         }\n\n     }\n```\n\n### Step 3: Skippy In Action\n\nRun the tests:\n```\n./gradlew test\n\nFooTest \u003e testFoo() PASSED\nBarTest \u003e testBar() PASSED\n```\n\nSkippy performs a Test Impact Analysis every time you run a test. The result is stored in the .skippy folder:\n\n```\nls -l .skippy\n\ntest-impact-analysis.json\n```\n\nThis data allows Skippy to make intelligent skip-or-execute predictions. Let's see what happens when you run the tests again:\n\n```\n./gradlew test --rerun\n\nFooTest \u003e testFoo() SKIPPED\nBarTest \u003e testBar() SKIPPED\n```\n\nSkippy detects that nothing has changed and skips both tests.\n\nNext, introduce a bug in class `Foo`:\n```java\n     class Foo {\n    \n         static String getFoo() {\n-            return \"foo\";\n+            return null;\n         }\n         \n     }\n```\n\nRe-run the tests:\n\n```\n./gradlew test\n\nFooTest \u003e testFoo() FAILED\n    org.opentest4j.AssertionFailedError: expected: \u003cfoo\u003e but was: \u003cnull\u003e\nBarTest \u003e testBar() SKIPPED\n```\n\nSkippy detects the change and executes `FooTest`. The regression is caught quickly - `BarTest` remains skipped.\n\nFix the bug and re-run the tests:\n\n```\n./gradlew test\n\nFooTest \u003e testFoo() PASSED\nBarTest \u003e testBar() SKIPPED\n```\n\nSkippy executes `FooTest` and updates the data in the .skippy folder.\nBoth tests will be skipped when you run them again:\n\n```\n./gradlew test --rerun\n\nFooTest \u003e testFoo() SKIPPED\nBarTest \u003e testBar() SKIPPED\n```\n\n## Use Skippy In Your CI Pipeline\n\nIt's safe to add the .skippy folder to version control. This will automatically enable Skippy's Predictive Test\nSelection when your pipeline runs.\n\n## Contributions \u0026 Issues\n\nContributions are always welcome! You can either\n- submit a pull request,\n- create an issue in\n  [GitHub's issue tracker](https://github.com/skippy-io/skippy/issues) or\n- email [contact@skippy.io](mailto:contact@skippy.io).\n\nI would love to hear from you.\n\n## Building Skippy Locally\n\nYou need JDK 17 or upwards to build Skippy.\n\nIf you want to run the entire build including tests, use `build`:\n\n```\n./gradlew build\n```\n\nIf you want to publish all jars to your local Maven repository, use `publishToMavenLocal`:\n\n```\n./gradlew publishToMavenLocal\n```\n\n## Projects in this repo\n\nThis repo contains the following sub-projects:\n\n- [skippy-core](skippy-core/README.md): Common functionality for all libraries in this repo\n- [skippy-gradle](skippy-gradle/README.md): Skippy's Test Impact Analysis for Gradle\n- [skippy-gradle-android](skippy-gradle-android/README.md): Skippy's Test Impact Analysis for Gradle \u0026 Android\n- [skippy-maven](skippy-maven/README.md): Skippy's Test Impact Analysis for Maven\n- [skippy-junit4](skippy-junit4/README.md): Skippy's Predictive Test Selection For JUnit 4\n- [skippy-junit5](skippy-junit5/README.md): Skippy's Predictive Test Selection For JUnit 5\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskippy-io%2Fskippy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskippy-io%2Fskippy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskippy-io%2Fskippy/lists"}