{"id":18640262,"url":"https://github.com/dmage/doppel","last_synced_at":"2025-11-04T20:30:22.235Z","repository":{"id":146847232,"uuid":"255897796","full_name":"dmage/doppel","owner":"dmage","description":null,"archived":false,"fork":false,"pushed_at":"2020-04-15T11:42:38.000Z","size":19,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-03-24T08:46:21.017Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dmage.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-04-15T11:38:04.000Z","updated_at":"2024-06-19T08:54:08.673Z","dependencies_parsed_at":"2023-07-08T22:01:25.371Z","dependency_job_id":null,"html_url":"https://github.com/dmage/doppel","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmage%2Fdoppel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmage%2Fdoppel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmage%2Fdoppel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dmage%2Fdoppel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dmage","download_url":"https://codeload.github.com/dmage/doppel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239441663,"owners_count":19639122,"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-07T05:53:49.264Z","updated_at":"2025-11-04T20:30:22.175Z","avatar_url":"https://github.com/dmage.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Doppel\n\n\u003e A doppelgänger is a non-biologically related look-alike or double of a living person. —Wikipedia\n\nFind doppelgangers in your test failures.\n\n## Usage\n\n    make init\n    make download-release\n    make update\n\nUse ./hack/view.sh to inspect the database:\n\n    $ ./hack/view.sh\n    ...\n    e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 ./output/logs__release-openshift-ocp-installer-e2e-ovirt-4.4__1017/0002_Run_template_e2e_ovirt___e2e_ovirt_container_test.txt\n    4e4cf4d958d4856f5ff17681c9fa9b4149929ef2cc0b0eecd99dd8b1fa2616a6 ./output/logs__release-openshift-ocp-installer-e2e-azure-4.6__36/0001_Create_the_release_image_containing_all_images_built_by_this_job.txt\n    c897cf78a79c4db493978cab76b48a94804accf3c1c80ae72f9f3435e54fddaf ./output/logs__release-openshift-origin-installer-e2e-gcp-4.5__1400/0012__sig_builds__Feature_Builds__oc_new_app__should_fail_with_a___name_longer_than_58_characters__Suite_openshift_conformance_parallel_.txt\n    622e128ec365c64ce5770fc5ec8d2ac42ec3f5c5739e02dca76234a7d64b7b0b ./output/logs__release-openshift-origin-installer-e2e-gcp-4.5__1400/0002__sig_builds__Feature_Builds__prune_builds_based_on_settings_in_the_buildconfig__should_prune_failed_builds_based_on_the_failedBuildsHistoryLimit_setting__Suite_openshift_conformance_parallel_.txt\n\nThe same failures can be listed by\n\n    $ go run ./cmd/list-documents/ 622e128ec365c64ce5770fc5ec8d2ac42ec3f5c5739e02dca76234a7d64b7b0b\n    output/logs__release-openshift-origin-installer-e2e-gcp-4.5__1400/0002__sig_builds__Feature_Builds__prune_builds_based_on_settings_in_the_buildconfig__should_prune_failed_builds_based_on_the_failedBuildsHistoryLimit_setting__Suite_openshift_conformance_parallel_.txt\n    output/logs__release-openshift-origin-installer-e2e-gcp-4.5__1400/0009__sig_builds__Feature_Builds__prune_builds_based_on_settings_in_the_buildconfig__buildconfigs_should_have_a_default_history_limit_set_when_created_via_the_group_api__Suite_openshift_conformance_parallel_.txt\n    output/logs__release-openshift-origin-installer-e2e-gcp-4.5__1400/0014__sig_builds__Feature_Builds__prune_builds_based_on_settings_in_the_buildconfig__should_prune_builds_after_a_buildConfig_change__Suite_openshift_conformance_parallel_.txt\n\nSimilar failures can be found using\n\n    $ go run ./cmd/similar/ 622e128ec365c64ce5770fc5ec8d2ac42ec3f5c5739e02dca76234a7d64b7b0b\n    622e128ec365c64ce5770fc5ec8d2ac42ec3f5c5739e02dca76234a7d64b7b0b 0 1\n    0c5f5eb7bdc6a95bcf586c595f1ecb44dcf6f7606b8ea72ae34da77cf4f39ecd 1 0.8876080691642652\n    cf42ae60fddf181fdbf1045ef80890e153ed8ef863b3c04def82c36759ac1fac 1 0.9375\n\nThis is a list of failure signatures:\n\n    $ go run ./cmd/show/ 622e128ec365c64ce5770fc5ec8d2ac42ec3f5c5739e02dca76234a7d64b7b0b\n    DATE TIME.0: INFO:  \u003e ERROR: (gcloud.compute.instance-groups.list-instances) could not parse resource []\n    DATE TIME.0: INFO: Cluster image sources lookup failed: exit status 0\n    DATE TIME.0: INFO: OCM rollout still progressing or in error: True\n    DATE TIME.0: INFO: lookupDiskImageSources: gcloud error with [[]string{\"instance-groups\", \"list-instances\", \"\", \"--format=get(instance)\"}]; err:exit status 0\n    fail [github.com/openshift/origin/test/extended/builds/build_pruning.go:0]: Unexpected error:\n    $ go run ./cmd/show/ cf42ae60fddf181fdbf1045ef80890e153ed8ef863b3c04def82c36759ac1fac\n    DATE TIME.0: INFO:  \u003e ERROR: (gcloud.compute.instance-groups.list-instances) could not parse resource []\n    DATE TIME.0: INFO: Cluster image sources lookup failed: exit status 0\n    DATE TIME.0: INFO: OCM rollout still progressing or in error: True\n    DATE TIME.0: INFO: lookupDiskImageSources: gcloud error with [[]string{\"instance-groups\", \"list-instances\", \"\", \"--format=get(instance)\"}]; err:exit status 0\n    fail [github.com/openshift/origin/test/extended/builds/valuefrom.go:0]: Unexpected error:\n\n## How it works?\n\nScript denoise-1 remove all random noise from output: timestamps, shas, random identifiers, etc.\n\nScript denoise-2 makes a failure singature: it keeps only important lines and sorts them.\n\nmake update uses the program `record` to save pairs (filename, denoise-2 output).\n\nrecord calculates three hashes:\n\n  1. hash1 is SHA-256 of the document (i.e. the denoise-2 output)\n  2. hash2 is a SimHash inspired hash.\n  3. hash3 is the number of unique trigrams in the document (for example, `abcabc` has `abc`, `bca`, `cab`, `abc`, i.e. 4 trigrams and 3 unique trigrams).\n\n`list-documents` show files with the same hash1.\n\n`similar` selects documents that have similar hash3 (the documents are expected to be the same size) and similar hash2. For these documents, it checks if the Jaccard index and if it's high enough, it prints\n\n    hash1 hash2-distance jaccard-index\n\nIf everything works right, you make think of this list as of similar failures.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmage%2Fdoppel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdmage%2Fdoppel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdmage%2Fdoppel/lists"}