{"id":25776310,"url":"https://github.com/otto-de/jlineup","last_synced_at":"2026-04-10T22:09:32.672Z","repository":{"id":38361967,"uuid":"70062587","full_name":"otto-de/jlineup","owner":"otto-de","description":"An easy-to-use visual acceptance test tool to automatically detect design changes of your website. Works on the command line or as a web service.","archived":false,"fork":false,"pushed_at":"2026-04-02T22:36:55.000Z","size":52344,"stargazers_count":85,"open_issues_count":2,"forks_count":18,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-04-03T02:45:41.089Z","etag":null,"topics":["acceptance-testing","continuous-deployment","continuous-integration","frontend-testing","headless","test-automation","visual-acceptance-testing"],"latest_commit_sha":null,"homepage":"","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/otto-de.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.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,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-10-05T13:22:08.000Z","updated_at":"2026-04-02T22:36:59.000Z","dependencies_parsed_at":"2023-10-16T22:37:06.242Z","dependency_job_id":"1b5a3b5f-1af4-40ff-96b4-eb241d681013","html_url":"https://github.com/otto-de/jlineup","commit_stats":null,"previous_names":[],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/otto-de/jlineup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otto-de%2Fjlineup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otto-de%2Fjlineup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otto-de%2Fjlineup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otto-de%2Fjlineup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/otto-de","download_url":"https://codeload.github.com/otto-de/jlineup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/otto-de%2Fjlineup/sbom","scorecard":{"id":371965,"data":{"date":"2025-08-18T11:06:02Z","repo":{"name":"github.com/otto-de/jlineup","commit":"f2c46b8ab00258ec68ebe91bd7687e3540f338e6"},"scorecard":{"version":"v4.13.1","commit":"49c0eed3a423f00c872b5c3c9f1bbca9e8aae799"},"score":6.8,"checks":[{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":8,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'force pushes' disabled on branch 'main'","Info: 'allow deletion' disabled on branch 'main'","Info: status checks require up-to-date branches for 'main'","Info: status check found to merge onto on branch 'main'","Warn: number of required reviewers is only 1 on branch 'main'","Warn: settings do not apply to administrators on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"15 out of 15 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"found 15 unreviewed changesets out of 15 -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#code-review"}},{"name":"Contributors","score":6,"reason":"2 different organizations found -- score normalized to 6","details":["Info: contributors work for otto-de,otto-de otto gmbh \u0026 co. kg"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: tool 'Dependabot' is used: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no OSSFuzz integration found: Follow the steps in https://github.com/google/oss-fuzz to integrate fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no OneFuzz integration found: Follow the steps in https://github.com/microsoft/onefuzz to start fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no GoBuiltInFuzzer integration found: Follow the steps in https://go.dev/doc/fuzz/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no PythonAtherisFuzzer integration found: Follow the steps in https://github.com/google/atheris to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CppLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no SwiftLibFuzzer integration found: Follow the steps in https://google.github.io/oss-fuzz/getting-started/new-project-guide/swift-lang/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no RustCargoFuzzer integration found: Follow the steps in https://rust-fuzz.github.io/book/cargo-fuzz.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no JavaJazzerFuzzer integration found: Follow the steps in https://github.com/CodeIntelligenceTesting/jazzer to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no ClusterFuzzLite integration found: Follow the steps in https://github.com/google/clusterfuzzlite to integrate fuzzing as part of CI.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no HaskellPropertyBasedTesting integration found: Use one of the following frameworks to fuzz your project:\nQuickCheck: https://hackage.haskell.org/package/QuickCheck\nhedgehog: https://hedgehog.qa/\nvalidity: https://github.com/NorfairKing/validity\nsmallcheck: https://hackage.haskell.org/package/smallcheck\nhspec: https://hspec.github.io/\ntasty: https://hackage.haskell.org/package/tasty (High effort)","Warn: no TypeScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)","Warn: no JavaScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: License file found in expected location: LICENSE:1","Info: FSF or OSI recognized license: LICENSE:1"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"30 commit(s) out of 30 and 1 issue activity out of 19 found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"no published package detected","details":["Warn: no GitHub/GitLab publishing workflow detected"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":8,"reason":"dependency not pinned by hash detected -- score normalized to 8","details":["Warn: containerImage not pinned by hash: lambda/Dockerfile:1: pin your Docker image by updating public.ecr.aws/lambda/java:21-x86_64 to public.ecr.aws/lambda/java:21-x86_64@sha256:2dcdf90dfb18a8216ce4020bad8538b88321c23279dd6cfc7786a4d1cbfacc69","Warn: containerImage not pinned by hash: web/Dockerfile:1: pin your Docker image by updating eclipse-temurin:17 to eclipse-temurin:17@sha256:6eca72bb4cd5fb8cd215f2579a4dfffd24b0f47effb6c868b7e92b7f0422fa9f","Info:  20 out of  20 GitHub-owned GitHubAction dependencies pinned","Info:   6 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (15) are checked with a SAST tool","Info: SAST tool detected: CodeQL"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected: On GitHub:\nEnable private vulnerability disclosure in your repository settings https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository\nAdd a section in your SECURITY.md indicating you have enabled private reporting, and tell them to follow the steps in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability to report vulnerabilities.\nOn GitLab:\nAdd a section in your SECURITY.md indicating the process to disclose vulnerabilities for your project.\nExamples: https://github.com/ossf/scorecard/blob/main/SECURITY.md, https://github.com/slsa-framework/slsa-github-generator/blob/main/SECURITY.md, https://github.com/sigstore/.github/blob/main/SECURITY.md.\nFor additional information on vulnerability disclosure, see https://github.com/ossf/oss-vulnerability-guide/blob/main/maintainer-guide.md. (Medium effort)","Warn: no security file to analyze: On GitHub:\nEnable private vulnerability disclosure in your repository settings https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository\nAdd a section in your SECURITY.md indicating you have enabled private reporting, and tell them to follow the steps in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability to report vulnerabilities.\nOn GitLab:\nProvide a point of contact in your SECURITY.md.\nExamples: https://github.com/ossf/scorecard/blob/main/SECURITY.md, https://github.com/slsa-framework/slsa-github-generator/blob/main/SECURITY.md, https://github.com/sigstore/.github/blob/main/SECURITY.md. (Low effort)","Warn: no security file to analyze: On GitHub:\nEnable private vulnerability disclosure in your repository settings https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository\nAdd a section in your SECURITY.md indicating you have enabled private reporting, and tell them to follow the steps in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability to report vulnerabilities.\nOn GitLab:\nAdd a section in your SECURITY.md indicating the process to disclose vulnerabilities for your project.\nExamples: https://github.com/ossf/scorecard/blob/main/SECURITY.md, https://github.com/slsa-framework/slsa-github-generator/blob/main/SECURITY.md, https://github.com/sigstore/.github/blob/main/SECURITY.md. (Low effort)","Warn: no security file to analyze: On GitHub:\nEnable private vulnerability disclosure in your repository settings https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository\nAdd a section in your SECURITY.md indicating you have enabled private reporting, and tell them to follow the steps in https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability to report vulnerabilities.\nOn GitLab:\nAdd a section in your SECURITY.md indicating the process to disclose vulnerabilities for your project.\nExamples: https://github.com/ossf/scorecard/blob/main/SECURITY.md, https://github.com/slsa-framework/slsa-github-generator/blob/main/SECURITY.md, https://github.com/sigstore/.github/blob/main/SECURITY.md. (Low effort)"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"0 out of 5 artifacts are signed or have provenance","details":["Warn: release artifact v4.8.1 does not have provenance: https://api.github.com/repos/otto-de/jlineup/releases/92397813","Warn: release artifact v4.8.1 not signed: https://api.github.com/repos/otto-de/jlineup/releases/92397813","Warn: release artifact v4.7.0 does not have provenance: https://api.github.com/repos/otto-de/jlineup/releases/83972457","Warn: release artifact v4.7.0 not signed: https://api.github.com/repos/otto-de/jlineup/releases/83972457","Warn: release artifact v4.6.3 does not have provenance: https://api.github.com/repos/otto-de/jlineup/releases/74276406","Warn: release artifact v4.6.3 not signed: https://api.github.com/repos/otto-de/jlineup/releases/74276406","Warn: release artifact v4.6.2 does not have provenance: https://api.github.com/repos/otto-de/jlineup/releases/74247740","Warn: release artifact v4.6.2 not signed: https://api.github.com/repos/otto-de/jlineup/releases/74247740","Warn: release artifact v4.6.1 does not have provenance: https://api.github.com/repos/otto-de/jlineup/releases/72978504","Warn: release artifact v4.6.1 not signed: https://api.github.com/repos/otto-de/jlineup/releases/72978504"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/build.yml:29","Info: topLevel 'contents' permission set to 'read': .github/workflows/build21.yml:29","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:24","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:32","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:33","Info: topLevel 'contents' permission set to 'read': .github/workflows/delete-old-packages.yml:13","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/delete-old-packages.yml:18: Verify which permissions are needed and consider whether you can reduce them. (High effort)","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:21"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"no vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T13:11:12.702Z","repository_id":38361967,"created_at":"2025-08-18T13:11:12.703Z","updated_at":"2025-08-18T13:11:12.703Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31564915,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["acceptance-testing","continuous-deployment","continuous-integration","frontend-testing","headless","test-automation","visual-acceptance-testing"],"created_at":"2025-02-27T06:01:21.326Z","updated_at":"2026-04-08T17:02:02.298Z","avatar_url":"https://github.com/otto-de.png","language":"Java","funding_links":[],"categories":["测试"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\u003cimg src=\"docs/jlineup-repository-image.png\" width=\"640\" /\u003e\u003c/div\u003e\n\n## Status\n[![Build](https://github.com/otto-de/jlineup/actions/workflows/build.yml/badge.svg)](https://github.com/otto-de/jlineup/actions?query=workflow%3ABuild)\n[![Maven Central](https://img.shields.io/maven-central/v/de.otto/jlineup-cli?label=maven-central\u0026nbsp;cli)](https://search.maven.org/search?q=g:de.otto%20a:jlineup-cli%20v:RELEASE%20p:jar)\n[![Maven Central](https://img.shields.io/maven-central/v/de.otto/jlineup-web?label=maven-central\u0026nbsp;web)](https://search.maven.org/search?q=g:de.otto%20a:jlineup-web%20v:RELEASE%20p:jar)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/otto-de/jlineup?label=GitHub\u0026nbsp;Release)](https://github.com/otto-de/jlineup/releases)\n![OSS Lifecycle](https://img.shields.io/osslifecycle?file_url=https%3A%2F%2Fraw.githubusercontent.com%2Fotto-de%2Fjlineup%2Fmain%2FOSSMETADATA)\n\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/otto-de/jlineup/badge)](https://scorecard.dev/viewer/?uri=github.com/otto-de/jlineup)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/11490/badge)](https://www.bestpractices.dev/projects/11490)\n\n## About\n\nJLineup is a tool which is useful for automated visual regression tests of web pages, especially in continuous delivery pipelines.\nIt can be used as a simple command line tool or as a small web service which is controlled via REST API. The comparison screenshots\ncan even be made in AWS Lambda functions, which makes it blazing fast, even with multiple resolutions and device emulations.\n\nJLineup shoots and compares screenshots of a web page at two consecutive points in time.\nIt does a pixel by pixel comparison of both runs and generates an HTML and a JSON report.\nBehind the scenes, it uses Selenium and a browser of choice (currently Chrome, Chromium and Firefox are supported).\n\nJLineup has no other dependencies than a web browser (Firefox or Chrome/Chromium) and a JVM. If the configured\nbrowser is not installed, it will be downloaded automatically by JLineup.\n*Experimental*: There's also a self-contained Linux AMD64 build of the CLI version that doesn't even require a JVM.\n\n## Example\n\nLet's take this little example [config](docs/CONFIGURATION.md) for a check of otto.de during a deployment:\n\n```yaml\nurls:\n  https://www.otto.de:\n    paths:\n    - /\n    devices:\n    - width: 850\n      height: 600\n      pixel-ratio: 1.0\n      device-name: DESKTOP\n      touch: false\n    - width: 1000\n      height: 850\n      pixel-ratio: 1.0\n      device-name: DESKTOP\n      touch: false\n    - width: 1200\n      height: 1000\n      pixel-ratio: 1.0\n      device-name: DESKTOP\n      touch: false\nwait-after-page-load: 0.5\nbrowser: chrome-headless\n```\n\nSave this as `lineup.yaml` (JSON is also supported — just use a `.json` file extension).\n\nJLineup runs before and after the deployment and generates a report like this:\n\n[![Screenshot of HTML report](docs/html-report.png)](https://otto-de.github.io/jlineup/docs/example-report/report.html)\n\nThere's also a JSON report, which is great if you want to check things by script:\n\n[Example JLineup JSON Report](docs/example-report/report.json)\n\n## Quick Howto\n\nJLineup CLI comes as executable Java Archive. Java 17 or higher has to be available to run it.\n\nOpen a terminal and download it like this:\n\n    wget https://repo1.maven.org/maven2/de/otto/jlineup-cli/5.2.1/jlineup-cli-5.2.1.jar -O jlineup.jar\n\nThen type\n\n    java -jar jlineup.jar --help\n\nto see the command line help.\n\nSee the [CLI documentation](docs/CLI.md) for more details and a small tutorial.\n\n## Integration example\n\nThis is an example, how JLineup can be helpful in your automated build and deploy pipeline.\nLet's assume, this is part of a continuous integration pipeline:\n\n![Pipeline exampe](docs/pipeline-example.png)\n\n## Browser Compatibility\n\nJLineup 5.2.1 was tested successfully with latest Chrome and Firefox. If not installed,\nthe configured browser is downloaded automatically by\n[Selenium's integrated manager](https://www.selenium.dev/documentation/selenium_manager/).\n\n## Documentation\n\n[JLineup as CLI tool](docs/CLI.md)\n\n[JLineup as web server](docs/WEB.md)\n\n[JLineup with AWS Lambda](docs/LAMBDA.md)\n\n[JLineup Job Configuration](docs/CONFIGURATION.md)\n\n## Third Party Libraries\n\nJLineup uses some third party tools and libraries\n\n##### Selenium\n\n* [Selenium](http://www.seleniumhq.org/) is licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).\n\n##### Jackson\n\n* [Jackson](https://github.com/FasterXML/jackson) is licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).\n\n##### Logback\n\n* [Logback](http://logback.qos.ch/) is licensed under the [Eclipse Public License](http://www.eclipse.org/legal/epl-v10.html).\n* The [SLF4J](http://www.slf4j.org) API is licensed under the [MIT License](http://www.slf4j.org/license.html).\n\n##### Thymeleaf\n\n* [Thymeleaf](http://www.thymeleaf.org/) is licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).\n\n##### Edison Microservice\n\n* [Edison Microservice](https://github.com/otto-de/edison-microservice) is licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).\n\n##### Spring Boot\n\n* [Spring Boot](http://spring.io/projects/spring-boot) is licensed under the [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0).\n\n##### GraalVM Community Edition\n\n* The binary cli version is built with [GraalVM Community Edition](https://github.com/oracle/graal/). GraalVM CE brings it's own [Product License](https://github.com/oracle/graal/blob/master/LICENSE).\n\n##### Image Compare Viewer\n\n* [Image Compare Viewer](https://github.com/kylewetton/image-compare-viewer) is licensed under the [MIT License](https://github.com/kylewetton/image-compare-viewer/blob/master/LICENSE).\n\n##### Google Fonts\n\n* [Google Fonts](https://developers.google.com/fonts/) are used in the HTML report. These are the [terms](https://developers.google.com/fonts/terms).\n\n##### AWS SDK\n\n* [AWS SDK for Java 2.0](https://github.com/aws/aws-sdk-java-v2) is licensed under the [Apache 2.0 License](https://github.com/aws/aws-sdk-java-v2?tab=Apache-2.0-1-ov-file#readme).\n\n##### Pixelmatch\n\nSome code from Pixelmatch was ported to Java for JLineup.\n* [Pixelmatch](https://github.com/mapbox/pixelmatch) is licensed under the [ISC License](https://github.com/mapbox/pixelmatch?tab=ISC-1-ov-file#readme).\n\n##### Looks-same\n\nSome code from Looks-same was ported to Java for JLineup.\n* [Looks-same](https://github.com/gemini-testing/looks-same) is licensed under the [MIT License](https://github.com/gemini-testing/looks-same#MIT-1-ov-file).\n\n### Historic Facts\n\nJLineup is a configuration compatible replacement\nfor Lineup, implemented in Java. The original\n[Lineup](https://github.com/otto-de-legacy/lineup) was\na Ruby tool, but is not maintained any more.\n\nCredit for original Lineup goes to [Finn Lorbeer](http://www.lor.beer/).\n\n## Publishing to Sonatype's Central Publisher Portal was challenging\n\nThis is a note regarding the migration of JLineup's publishing process because of https://central.sonatype.org/news/20250326_ossrh_sunset/.\n\nDuring migration from OSSRH on oss.sonatype.org to the Central Publisher Portal central.sonatype.com I faced\na problem uploading the JLineup artifacts, that were accepted by the old publishing process without problems:\n\n```\nComponent Summary\n1 failed Deployment Validation\nFailed to process deployment: Error on building manifests: No Archiver found for the stream signature Details: No Archiver found for the stream signature\n```\n\n![Maven Central Error Screenshot](docs/maven-central-publishing-failure.png)\n\n\nAfter some investigation I found out, that the problem was caused by the fact, that some JLineup jar files were executable jar files,\nwhich were enriched by the Spring Boot Gradle Plugin with the `launchScript()` functionality. This is obviously not supported by the new\npublishing API and leads to problems after the uploading of the bundle.zip.\n\nI commented the 'launchScript()' functionality in the build.gradle file and was able to publish the artifacts successfully.\n\n```\nbootJar {\n  enabled = true\n  //launchScript()\n}\n```\n\nI just leave this here to help others, who might face the same problem.\n\n### Contact\n\nIf you have questions or proposals, please open an issue or write an email to marco DOT geweke AT otto.de\n\n\n\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"docs/jlineup-logo-2024.png\" width=\"150\" /\u003e\u003c/div\u003e\t\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotto-de%2Fjlineup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fotto-de%2Fjlineup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fotto-de%2Fjlineup/lists"}