{"id":15368595,"url":"https://github.com/koddsson/dpxdt-server","last_synced_at":"2026-06-13T08:33:32.346Z","repository":{"id":27837485,"uuid":"31327519","full_name":"koddsson/dpxdt-server","owner":"koddsson","description":"Abstracted the API server out from dpxdt and stuck it in docker.","archived":false,"fork":false,"pushed_at":"2015-02-26T08:07:21.000Z","size":268,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-25T10:28:00.370Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/koddsson.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}},"created_at":"2015-02-25T17:54:14.000Z","updated_at":"2016-02-17T00:08:49.000Z","dependencies_parsed_at":"2022-09-03T11:42:44.137Z","dependency_job_id":null,"html_url":"https://github.com/koddsson/dpxdt-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/koddsson/dpxdt-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koddsson%2Fdpxdt-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koddsson%2Fdpxdt-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koddsson%2Fdpxdt-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koddsson%2Fdpxdt-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/koddsson","download_url":"https://codeload.github.com/koddsson/dpxdt-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/koddsson%2Fdpxdt-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34278153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-10-01T13:29:57.642Z","updated_at":"2026-06-13T08:33:32.328Z","avatar_url":"https://github.com/koddsson.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Depicted—dpxdt\n\n[![Build Status](https://travis-ci.org/koddsson/dpxdt-server.svg?branch=master-travis)](https://travis-ci.org/koddsson/dpxdt-server)\n[![Coverage Status](https://coveralls.io/repos/koddsson/dpxdt-server/badge.svg?branch=master)](https://coveralls.io/r/koddsson/dpxdt-server?branch=master)\n\nMake continuous deployment safe by comparing before and after webpage \nscreenshots for each release. Depicted shows when any visual, perceptual \ndifferences are found. This is the ultimate, automated end-to-end test.\n\n### API Reference\n\nAll of these requests are POSTs with URL-encoded or multipart/form-data bodies \nand require HTTP Basic Authentication using your API key as the username and \nsecret as the password. All responses are JSON. The 'success' key will be \npresent in all responses and true if the request was successful. If 'success'\nisn't present, a human-readable error message may be present in the response \nunder the key 'error'.\n\nEndpoints:\n\n- [/api/create_release](#apicreate_release)\n- [/api/find_run](#apifind_run)\n- [/api/request_run](#apirequest_run)\n- [/api/upload](#apiupload)\n- [/api/report_run](#apireport_run)\n- [/api/runs_done](#apiruns_done)\n\n#### /api/create_release\n\nCreates a new release candidate for a build.\n\n##### Parameters\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erelease_name\u003c/dt\u003e\n    \u003cdd\u003eName of the new release.\u003c/dd\u003e\n    \u003cdt\u003eurl\u003c/dt\u003e\n    \u003cdd\u003eURL of the homepage of the new release. Only present for humans who need to understand what a release is for.\u003c/dd\u003e\n\u003c/dl\u003e\n\n##### Returns\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erelease_name\u003c/dt\u003e\n    \u003cdd\u003eName of the release that was just created.\u003c/dd\u003e\n    \u003cdt\u003erelease_number\u003c/dt\u003e\n    \u003cdd\u003eNumber assigned to the new release by the system.\u003c/dd\u003e\n    \u003cdt\u003eurl\u003c/dt\u003e\n    \u003cdd\u003eURL of the release's homepage.\u003c/dd\u003e\n\u003c/dl\u003e\n\n#### /api/find_run\n\nFinds the last good run of the given name for a release. Returns an error if no run previous good release exists.\n\n##### Parameters\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erun_name\u003c/dt\u003e\n    \u003cdd\u003eName of the run to find the last known-good version of.\u003c/dd\u003e\n\u003c/dl\u003e\n\n##### Returns\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erelease_name\u003c/dt\u003e\n    \u003cdd\u003eName of the last known-good release for the run.\u003c/dd\u003e\n    \u003cdt\u003erelease_number\u003c/dt\u003e\n    \u003cdd\u003eNumber of the last known-good release for the run.\u003c/dd\u003e\n    \u003cdt\u003erun_name\u003c/dt\u003e\n    \u003cdd\u003eName of the run that was found. May be null if a run could not be found.\u003c/dd\u003e\n    \u003cdt\u003eurl\u003c/dt\u003e\n    \u003cdd\u003eURL of the last known-good release for the run. May be null if a run could not be found.\u003c/dd\u003e\n    \u003cdt\u003eimage\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the screenshot image associated with the run. May be null if a run could not be found.\u003c/dd\u003e\n    \u003cdt\u003elog\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the log file from the screenshot process associated with the run. May be null if a run could not be found.\u003c/dd\u003e\n    \u003cdt\u003econfig\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the config file used for the screenshot process associated with the run. May be null if a run could not be found.\u003c/dd\u003e\n\u003c/dl\u003e\n\n#### /api/request_run\n\nRequests a new run for a release candidate. Causes the API system to take screenshots and do pdiffs. When `ref_url` and `ref_config` are supplied, the system will run two sets of captures (one for the baseline, one for the new release) and then compare them. When `rel_url` and `ref_config` are not specified, the last good run for this build is found and used for comparison.\n\n##### Parameters\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erelease_name\u003c/dt\u003e\n    \u003cdd\u003eName of the release.\u003c/dd\u003e\n    \u003cdt\u003erelease_number\u003c/dt\u003e\n    \u003cdd\u003eNumber of the release.\u003c/dd\u003e\n    \u003cdt\u003eurl\u003c/dt\u003e\n    \u003cdd\u003eURL to request as a run.\u003c/dd\u003e\n    \u003cdt\u003econfig\u003c/dt\u003e\n    \u003cdd\u003eJSON data that is the config for the new run.\u003c/dd\u003e\n    \u003cdt\u003eref_url\u003c/dt\u003e\n    \u003cdd\u003eURL of the baseline to request as a run.\u003c/dd\u003e\n    \u003cdt\u003eref_config\u003c/dt\u003e\n    \u003cdd\u003eJSON data that is the config for the baseline of the new run.\u003c/dd\u003e\n\u003c/dl\u003e\n\n###### Format of `config`\n\nThe config passed to the `request_run` function may have any or all of these fields. All fields are optional and have reasonably sane defaults.\n\n```json\n{\n    \"viewportSize\": {\n        \"width\": 1024,\n        \"height\": 768\n    },\n    \"injectCss\": \".my-css-rules-here { display: none; }\",\n    \"injectJs\": \"document.getElementById('foobar').innerText = 'foo';\",\n    \"resourceTimeoutMs\": 60000\n}\n```\n\n##### Returns\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erelease_name\u003c/dt\u003e\n    \u003cdd\u003eName of the release.\u003c/dd\u003e\n    \u003cdt\u003erelease_number\u003c/dt\u003e\n    \u003cdd\u003eNumber of the release.\u003c/dd\u003e\n    \u003cdt\u003erun_name\u003c/dt\u003e\n    \u003cdd\u003eName of the run that was created.\u003c/dd\u003e\n    \u003cdt\u003eurl\u003c/dt\u003e\n    \u003cdd\u003eURL that was requested for the run.\u003c/dd\u003e\n    \u003cdt\u003econfig\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the config file that will be used for the screenshot process associated with the run.\u003c/dd\u003e\n    \u003cdt\u003eref_url\u003c/dt\u003e\n    \u003cdd\u003eURL that was requested for the baseline reference for the run.\u003c/dd\u003e\n    \u003cdt\u003eref_config\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the config file used for the baseline screenshot process of the run.\u003c/dd\u003e\n\u003c/dl\u003e\n\n#### /api/upload\n\nUploads an artifact referenced by a run.\n\n##### Parameters\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003e(a single file in the multipart/form-data)\u003c/dt\u003e\n    \u003cdd\u003eData of the file being uploaded. Should have a filename in the mime headers so the system can infer the content type of the uploaded asset.\u003c/dd\u003e\n\u003c/dl\u003e\n\n##### Returns\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003esha1sum\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the file that was uploaded.\u003c/dd\u003e\n    \u003cdt\u003econtent_type\u003c/dt\u003e\n    \u003cdd\u003eContent type of the artifact that was uploaded.\u003c/dd\u003e\n\u003c/dl\u003e\n\n#### /api/report_run\n\nReports data for a run for a release candidate. May be called multiple times as progress is made for a run. Should not be called once the screenshot image for the run has been assigned.\n\n##### Parameters\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erelease_name\u003c/dt\u003e\n    \u003cdd\u003eName of the release.\u003c/dd\u003e\n    \u003cdt\u003erelease_number\u003c/dt\u003e\n    \u003cdd\u003eNumber of the release.\u003c/dd\u003e\n    \u003cdt\u003erun_name\u003c/dt\u003e\n    \u003cdd\u003eName of the run.\u003c/dd\u003e\n    \u003cdt\u003eurl\u003c/dt\u003e\n    \u003cdd\u003eURL associated with the run.\u003c/dd\u003e\n    \u003cdt\u003eimage\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the screenshot image associated with the run.\u003c/dd\u003e\n    \u003cdt\u003elog\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the log file from the screenshot process associated with the run.\u003c/dd\u003e\n    \u003cdt\u003econfig\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the config file used for the screenshot process associated with the run.\u003c/dd\u003e\n    \u003cdt\u003eref_url\u003c/dt\u003e\n    \u003cdd\u003eURL associated with the run's baseline release.\u003c/dd\u003e\n    \u003cdt\u003eref_image\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the screenshot image associated with the run's baseline release.\u003c/dd\u003e\n    \u003cdt\u003eref_log\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the log file from the screenshot process associated with the run's baseline release.\u003c/dd\u003e\n    \u003cdt\u003eref_config\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the config file used for the screenshot process associated with the run's baseline release.\u003c/dd\u003e\n    \u003cdt\u003ediff_image\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the perceptual diff image associated with the run.\u003c/dd\u003e\n    \u003cdt\u003ediff_log\u003c/dt\u003e\n    \u003cdd\u003eArtifact ID (SHA1 hash) of the log file from the perceptual diff process associated with the run.\u003c/dd\u003e\n    \u003cdt\u003ediff_failed\u003c/dt\u003e\n    \u003cdd\u003ePresent and non-empty string when the diff process failed for some reason. May be missing when diff ran and reported a log but may need to retry for this run.\u003c/dd\u003e\n    \u003cdt\u003erun_failed\u003c/dt\u003e\n    \u003cdd\u003ePresent and non-empty string when the run failed for some reason. May be missing when capture ran and reported a log but may need to retry for this run.\u003c/dd\u003e\n    \u003cdt\u003edistortion\u003c/dt\u003e\n    \u003cdd\u003eFloat amount of difference found in the diff that was uploaded, as a float between 0 and 1\u003c/dd\u003e\n\u003c/dl\u003e\n\n##### Returns\nNothing but success on success.\n\n#### /api/runs_done\n\nMarks a release candidate as having all runs reported.\n\n##### Parameters\n\u003cdl\u003e\n    \u003cdt\u003ebuild_id\u003c/dt\u003e\n    \u003cdd\u003eID of the build.\u003c/dd\u003e\n    \u003cdt\u003erelease_name\u003c/dt\u003e\n    \u003cdd\u003eName of the release.\u003c/dd\u003e\n    \u003cdt\u003erelease_number\u003c/dt\u003e\n    \u003cdd\u003eNumber of the release.\u003c/dd\u003e\n\u003c/dl\u003e\n\n##### Returns\n\u003cdl\u003e\n    \u003cdt\u003eresults_url\u003c/dt\u003e\n    \u003cdd\u003eURL where a release candidates run status can be viewed in a web browser by a build admin.\u003c/dd\u003e\n\u003c/dl\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoddsson%2Fdpxdt-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkoddsson%2Fdpxdt-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkoddsson%2Fdpxdt-server/lists"}