Repository navigation
Release 2.2.0: run it with Docker or Java alone, with the licences of what it carries - #411
Merged
Merged
Conversation
…its licence asks for dist/THIRD-PARTY.txt goes beside LICENSE and NOTICE in the archive's folder and the image. It lists the 63 libraries in lib/ by the licence each is used under, and carries the MIT, Eclipse Distribution and Mozilla Public License texts and the notices of Rhino and SQLite JDBC. dist/assemble.sh refuses a lib/ that holds a library the file does not list, or lacks one it does, and check-restest.sh checks that the image and a release's folder carry it. ADR-0032 amended. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…f its base images Every pom.xml from 2.2.0-SNAPSHOT to 2.2.0, with ./mvnw versions:set; the JSON Schemas already name v2.2.0. The Dockerfile's two base images move to the digests eclipse-temurin:25-jdk and 21-jre have today, which carry the same Java, 25.0.4.1 and 21.0.12.1, on a newer Ubuntu. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…utput where a page quotes a run The README and the manual's chapter 2 give the three ways in: the image with one docker run, the archive with Java 21 or later, and the source as before, each ending in a line that makes `restest` the command. The manual and the README now write `restest` for it; chapter 1 says so, chapter 7 how a setting's variable reaches the image, chapter 9's workflow fetches the archive in place of cloning v2.1.0, and chapter 10 says what the archive's launcher and Docker answer when they cannot start or reach an API. The README's first run and chapter 3 are runs of 2.2.0 against the pet store and pet-clinic, with their prose for errors and warnings; docs/report.md quotes the README's run. Two known limitations from the release evaluation: many F206 are an API reading leniently what its document forbids, and a path parameter the path has no place for gives a false F206. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….1, and the smaller points Each way in now ends with restest as a command on the PATH, a script of two lines for Docker, so that scripts and coding agents find it as a terminal does; an alias reached neither. On Linux, an API listening only on 127.0.0.1 is reached with --network host and localhost, which chapters 2 and 10 and the README say. The source install clones v2.2.0, and updating it moves to a tag. The list of libraries names httpclient as a carrier of the Public Suffix List; check-restest.sh's header, the CI page's dependency updates, the manual's contents, the README's licence line inside a release, and a sentence of the report page cut in two by #410 follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related: None. This is the release of 2.2.0, prepared after an evaluation of its candidate against 2.1.0, which the maintainer asked for on 22 October.
What you can do now that you could not before
docker run ghcr.io/isa-group/restest:2.2.0), with nothing but Java from the release's archive, or built from the source as before; the README and the manual's chapter 2 say how, each ending withrestestas a command on thePATH, which scripts and coding agents find as a terminal does.THIRD-PARTY.txt, every library in them with the licence it is used under and the texts those licences ask to travel with every copy, and no release can be assembled with a library the file does not list.Try it yourself
From a clean clone, with only Java and git:
Real output, in a fresh clone of this branch on 23 October (the Java line is your own):
A library the list leaves out stops the release. In the same clone:
With Docker as well, the image is built from the same clone as the release builds it:
The pages to read are the README's Installation and use and the manual's chapter 2.
How it works
The version.
-SNAPSHOTis how Maven writes "on the way to this version". This pull request removes it from everypom.xml. After the merge, the tagv2.2.0on the merge commit starts the release workflow, which builds the image and the archives, checks them on three operating systems and two processors, pushes the image, and leaves a draft release for a maintainer to write the notes in and publish (docs/ci.md).The libraries' licences. Until 2.2.0 nobody received RESTest's libraries from RESTest: Maven fetched each from its own project. The archive and the image now hand on 63 of them, and some licences — MIT, the BSD-style Eclipse Distribution License, the Mozilla Public License — ask that their text and copyright lines go with every copy.
dist/THIRD-PARTY.txtlists every library under its licence and carries those texts; the Apache License, which most of them and RESTest share, isLICENSEbeside it. The list is written by hand, and the script that assembles a release compares it with the libraries it is about to pack: a dependency added, dropped or moved to another version stops the release, and the image job of every pull request, until someone writes its line and reads its licence.The pages. The installation sections had one way in, building from the source, and the manual's examples ran
./restestfrom a checkout. They now give the image, the archive and the source, and writerestest, which each way puts on thePATH: the archive'sbin/, the checkout, or, for Docker, a two-line script that runs the image. That script also lends the current folder to the container, hands onRESTEST_AUTH, and lets it reach the machine it runs on ashost.docker.internal, since inside a containerlocalhostis the container itself; on Linux, an API that listens only on127.0.0.1needs--network hostinstead. Chapters 2, 7 and 10 say what that changes. The README's first run and chapter 3 are new runs of 2.2.0, which print errors and warnings.What changed in the code
dist/THIRD-PARTY.txt(new): 49 libraries under the Apache License 2.0, 8 under it or the LGPL (used under Apache), 3 under MIT (jopt-simple, whose jar carries no licence, and SLF4J), 2 under the Eclipse Distribution License (the Jakarta Activation and XML Binding APIs), and Rhino under the MPL 2.0, with where its source is. The MIT, EDL and MPL texts, and Rhino's and SQLite JDBC's own notices, are copied from the jars; jopt-simple's from its project at the tagjopt-simple-5.0.4. okhttp, guava and httpclient carry the Public Suffix List, under the MPL 2.0, and the list says so.dist/assemble.sh: compares thelib/…jarlines of the list with the jars inrestest-cli/target/libother than RESTest's own, names each that is carried but not listed or listed but not carried, and ends with1; then copies the list besideLICENSEandNOTICE..github/scripts/check-restest.sh: the image must have/opt/restest/THIRD-PARTY.txt, and a release's folderTHIRD-PARTY.txt; its header says so.docs/ci.md's row for how RESTest starts and its section on dependency updates, the ADR index, and the README's License section follow.pom.xmlfrom2.2.0-SNAPSHOTto2.2.0, with./mvnw versions:set. The JSON Schemas'$idalready namesv2.2.0.Dockerfile: the digests ofeclipse-temurin:25-jdkand21-jreas they are today. Same Java, 25.0.4.1 and 21.0.12.1; a newer Ubuntu underneath (step 1 of a release while Dependabot is off).README.md: "What you need" and "Install" with the three ways, the source one cloningv2.2.0; "Your first run" and its prose from a run of 2.2.0 against the online pet store, showing an error, a warning and anF206on the same request; "Reading what it says" describes errors and warnings;restestfor the command throughout.restest;docker run … version, of the archive'sbin/restest version, and of its refusal of Java 17; the checksums; Linux's--network host; updating each way;-e;curl … | tar -xz) in place of cloning and buildingv2.1.0;127, Docker'slocalhost, and the folder lent as/work;restestfor./restest.docs/report.md: the README run's first lines and last line as they are now, and a sentence Say everywhere what 2.2.0 does, before it is released #410 left cut in two.docs/manual/README.md: chapter 2's line in the contents.docs/known-limitations.md: two entries from the release evaluation. ManyF206are an API reading leniently what its document forbids: 22 of 28 read by hand were. And a path parameter the path has no place for gives a falseF206.Evidence
./mvnw verifygreen at the tip of this branch, with version 2.2.0: 4,648 tests, 0 failures, BUILD SUCCESS in 1 min 35 s. No test added: the new check is indist/assemble.shandcheck-restest.sh, which the image job of CI runs on every pull request; the first was made to fail here, as "Try it yourself" shows — CI: added below once it has run.DocumentedLinksTestamong them.src/mainchanged.c9658b3d, whose code this is: 52 APIs of the Web Fuzzing Dataset, two seeds, three minutes each, against 2.1.0, and sixteen open-source APIs whose code was measured for branch coverage. No run ended with2,3or4; no measure of coverage or of server errors found got worse with significance; branch coverage 32.7% → 32.8%, better on 8 APIs and worse on 1 (sign test, p 0.04); and 98 faults were read by hand, which gave the two known limitations.check-restest.sh 2.2.0, the new checks included;restestscript of the README and chapter 2, on thePATH, ran against pet-clinic on the same Mac throughhost.docker.internal, from chapter 9's script run withbashas well as from a terminal; it passedRESTEST_AUTHthrough, wroterestest-out/report.jsoninto the folder lent, and ended with130on an interrupt, its run cut short and reported;127.0.0.1was reached with--network hostandlocalhost, and not throughhost.docker.internal, which ended with3: what chapter 2 and 10 now say;bin/put on thePATHanswerrestest versionfrom another folder;0;Decisions taken
license-maven-plugingave the licence each project declares, which is where the list started; but a tool cannot say what a licence asks a copy to carry, and a new version of a library can change its licence. A check that stops on any difference makes a person look each time a dependency moves. The cost falls on dependency updates: each changes one line of the list.NOTICEfiles stay inside their jars, which the archive carries unchanged, rather than gathered into RESTest'sNOTICE. The list says where they are.resteston thePATHrather than./restest, in the README and the manual. With three ways in,./restestis right for only one. A first draft definedrestestwith analias, which the review showed a script and a coding agent never see: chapter 9's script would have ended with127and blamed the run. A command on thePATHis found by both.docs/ci.mdandAGENTS.md, for people working on RESTest from a checkout, keep./restest.~/.local/bin, rather than a wrapper RESTest would ship: it is written withprintffrom the page, and says in one line whatdocker runis handed. It carries--add-hoston every system — Linux needs it to knowhost.docker.internal, and Docker Desktop accepts it — and hands onRESTEST_AUTHonly, since-enames one variable at a time; chapter 7 says how to hand on a setting.v2.2.0, as the release notes do, and updating it fetches and checks out the next tag:git pullfails on a tag.localhostonly with--network host, which was not tried here; the archive keeps the workflow's steps as they were and runs on any runner with Java.docs/report.md's summary anddocs/faults.md's examples stay as Tell errors from warnings, and fail a run on its errors #409 and Say everywhere what 2.2.0 does, before it is released #410 left them. They are runs ofc9658b3d, whose code this is, and already print errors and warnings.F206is fixed is not the documentation's to promise; the entry goes when the fix comes.docs/ci.mdsays.Open questions
restestscript is for a Unix shell, and Git Bash rewrites the-v "$PWD:/work"path. Windows users have the archive'srestest.cmd, which CI checks. Worth a page, or left to a user who asks?v2.2.0on the merge commit;ghcr.io/isa-group/restestas a private package, which an owner of the organisation makes public;masterto2.2.1-SNAPSHOT.masterAGENTS.mdholddocs/DESIGN.mdwithout explicit approval🤖 Generated with Claude Code