Improvements to the contribution guide.

Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
This commit is contained in:
Simone Bordet 2023-08-01 19:41:55 +02:00
parent ecf8795aef
commit e71fa6dedd
No known key found for this signature in database
GPG Key ID: 1677D141BCF3584D
15 changed files with 167 additions and 216 deletions

View File

@ -1,21 +1,19 @@
Contributing to Jetty
=====================
# Contributing to Jetty
Contributions are always welcome!
Please see our [Contribution Guide](https://eclipse.dev/jetty/documentation/jetty-12/contribution-guide/index.html) for instructions on how to set up your development environment, as well as information on our processes and coding standards.
Please see our [Contribution Guide](https://eclipse.dev/jetty/documentation/contribution-guide/index.html) for instructions on how to set up your development environment, as well as information on our processes and coding standards.
Here are some quick links to other useful resources:
* [**Source code.**](https://github.com/eclipse/jetty.project) Jetty's canonical git repository is located on GitHub at https://github.com/eclipse/jetty.project.
* [**Mailing list.**](https://dev.eclipse.org/mailman/listinfo/jetty-dev) The [` jetty-dev@eclipse.org`](https://dev.eclipse.org/mailman/listinfo/jetty-dev) mailing list is a forum for technical discussion.
* [**Mailing list.**](https://accounts.eclipse.org/mailing-list/jetty-users) The [`jetty-users@eclipse.org`](mailto:jetty-users@eclipse.org) mailing list is a forum for technical discussion.
* [**Issue tracking.**](https://github.com/eclipse/jetty.project/issues) We use [GitHub Issues](https://github.com/eclipse/jetty.project/issues) to track ongoing development and issues.
## Eclipse Contributor Agreement
Eclipse Contributor Agreement
------------------------------
Before we can accept your contributions to the Jetty project, you will need to create and electronically sign a [Eclipse Contributor Agreement (ECA)](http://www.eclipse.org/legal/ecafaq.php):
1. Create an account on the [Eclipse foundation website](https://accounts.eclipse.org/user/login/) if you have not already done so.
@ -24,8 +22,8 @@ Before we can accept your contributions to the Jetty project, you will need to c
Be sure to use the same email address in your Eclipse account that you intend to use when you commit to GitHub.
Reporting Security Issues
-------------------------
## Reporting Security Issues
Jetty is actively developed by the team at [Webtide](https://webtide.com/), and the most direct method for reporting security issues is to mail [security@webtide.com](mailto:security@webtide.com).
We are flexible in how we work with reporters of security issues; however, we reserve the right to act in the interests of the Jetty project in all circumstances.

View File

@ -1,46 +1,51 @@
Eclipse Jetty
=============
# Eclipse Jetty
Eclipse Jetty is a lightweight, highly scalable, Java-based web server and Servlet engine.
Jetty's goal is to support web protocols (HTTP/1, HTTP/2, HTTP/3, WebSocket, etc.) in a high volume low latency way that provides maximum performance while retaining the ease of use and compatibility with years of Servlet development.
Jetty is a modern fully asynchronous web server that has a long history as a component oriented technology, and can be easily embedded into applications while still offering a solid traditional distribution for webapp deployment.
- [https://projects.eclipse.org/projects/rt.jetty](https://projects.eclipse.org/projects/rt.jetty)
- https://eclipse.dev/jetty/
- https://projects.eclipse.org/projects/rt.jetty
Webapp Example
--------------
## Webapp Example
```shell
$ mkdir base && cd base
$ mkdir jetty-base && cd jetty-base
$ java -jar $JETTY_HOME/start.jar --add-modules=http,ee10-deploy
$ cp ~/src/myproj/target/mywebapp.war webapps
$ java -jar $JETTY_HOME/start.jar
```
Multiple Versions Webapp Example
--------------------------------
## Multiple Versions Webapp Example
```shell
$ mkdir base && cd base
$ mkdir jetty-base && cd jetty-base
$ java -jar $JETTY_HOME/start.jar --add-modules=http,ee10-deploy,ee8-deploy
$ cp ~/src/myproj/target/mywebapp10.war webapps
$ cp ~/src/myproj/target/mywebapp8.war webapps
$ echo environment: ee8 > webapps/mywebapp8.properties
$ echo "environment: ee8" > webapps/mywebapp8.properties
$ java -jar $JETTY_HOME/start.jar
```
Embedded Example
----------------
## Embedded Jetty Example
```java
Server server = new Server(port);
ServletContextHandler context = new ServletContextHandler(server, "/");
context.addServlet(MyServlet.class, "/*");
server.setHandler(new MyHandler());
server.start();
```
Documentation
=============
## Embedded Servlet Example
```java
Server server = new Server(port);
ServletContextHandler context = new ServletContextHandler("/");
context.addServlet(MyServlet.class, "/*");
server.setHandler(context);
server.start();
```
# Documentation
[Jetty's documentation](https://eclipse.dev/jetty/documentation) is available on the Eclipse Jetty website.
@ -53,6 +58,6 @@ The documentation is divided into three guides, based on use case:
* The [Contribution Guide](https://eclipse.dev/jetty/documentation/jetty-11/contribution-guide/index.html) targets developers that wish to contribute to the Jetty Project with code patches or documentation improvements.
Commercial Support
==================
# Commercial Support
Expert advice and production support of Jetty are provided by [Webtide](https://webtide.com).

View File

@ -0,0 +1,5 @@
:ee-all: ee{8,9,10}
:ee-current: ee10
:ee-current-caps: EE 10
:experimental:
:imagesdir: images

View File

@ -16,7 +16,7 @@
The Eclipse Jetty Contribution Guide targets developers and writers who want to make contributions to the Jetty project by contributing code, writing documentation, or engaging in the larger community.
[[cg-mailing-lists]]
[[cg-intro-mailing-lists]]
=== Mailing Lists
One of the easiest ways to get involved is via our mailing lists:
@ -26,30 +26,31 @@ One of the easiest ways to get involved is via our mailing lists:
* *Jetty Announcements* (https://accounts.eclipse.org/mailing-list/jetty-announce[jetty-announce], https://www.eclipse.org/lists/jetty-announce[archives]) is for announcements about new releases and other updates from the project's maintainers.
[[cg-stack-overflow]]
[[cg-intro-stack-overflow]]
=== Stack Overflow
Another great resource, both for Jetty novices who need help and Jetty experts who want to contribute, is http://stackoverflow.com[StackOverflow].
In particular, the https://stackoverflow.com/questions/tagged/jetty[`jetty`] and https://stackoverflow.com/questions/tagged/embedded-jetty[`embedded-jetty`] tags see regular traffic.
[[cg-filing-issues]]
[[cg-intro-filing-issues]]
=== Filing Issues
You can flag potential bugs or suggest new Jetty features on our https://github.com/eclipse/jetty.project/issues[issue tracker].
:icons: font
[WARNING]
====
Note that the issue tracker is **not** meant as a standard support channel.
For individualized help, you'll have more success on the <<cg-mailing-lists,mailing lists>> or posting your question to <<cg-stack-overflow,Stack Overflow>>.
====
Before filing a new issue, https://github.com/eclipse/jetty.project/issues[check the tracker] to see if it's already been filed by someone else.
If you do file an issue, make sure to label it appropriately, as this will help the development team (and other users) find it more easily.
[[cg-help-wanted]]
[[cg-intro-help-wanted]]
=== Help Wanted
If you want to contribute to Jetty but don't have a specific task or goal in mind, consider looking through our https://github.com/eclipse/jetty.project/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22["Help Wanted" issue backlog].
These tasks range from the simple to the complex, but they're all ones we've identified as being particularly well-suited for new contributors to tackle.
[[cg-intro-commercial-support]]
=== Commercial Support
link:https://webtide.com[Webtide] is the company behind Jetty that provides services and support for the Jetty Project.
mailto:sales@webtide.com[Contact Webtide].

View File

@ -27,4 +27,4 @@ The email address you use to sign the ECA **must be the same** as the email you
====
Jetty's build process has a git hook that verifies each incoming pull request is signed with an email address with an active ECA.
If the git hook cannot verify your email, the Jetty committers **cannot do anything** to accept your commit**.
If the git hook cannot verify your email, the Jetty committers **cannot do anything** to accept your commit.

View File

@ -11,45 +11,39 @@
// ========================================================================
//
[[cg-getting-source]]
[[cg-source]]
== Getting the source code
Jetty's source is maintained on GitHub at https://github.com/eclipse/jetty.project, where it is managed by the http://github.com/eclipse/[Eclipse Foundation].
You can clone a copy of the Jetty repo onto your local machine by running:
[source, shell]
----
git clone https://github.com/eclipse/jetty.project.git
----
[[cg-repositories]]
=== Secondary repositories
[[cg-source-repositories]]
=== Related repositories
In addition to the https://github.com/eclipse/jetty.project[primary Jetty code repository], we maintain a number of secondary repos for project-related code and metadata:
In addition to the https://github.com/eclipse/jetty.project[Jetty code repository], we maintain a number of related repositories:
Administrative pom.xml file:: https://github.com/eclipse/jetty.parent
Build toolchain artifacts:: https://github.com/eclipse/jetty.toolchain
Development files/configuration:: https://git.eclipse.org/c/jetty/org.eclipse.jetty.admin.git
Non-Eclipse Jetty Repositories:: https://github.com/jetty-project
Build Toolchain:: https://github.com/eclipse/jetty.toolchain
[[cg-version-branches]]
[[cg-source-branches]]
=== Version branches
If you plan to work on a specific issue within Jetty, make sure to target the correct branch for your pull request.
.Active and inactive Jetty branches
.Active Jetty branches
[cols="4"]
|===
| https://github.com/eclipse/jetty.project/tree/jetty-12.0.x[jetty-12.0.x] | Development (default branch) | Servlet 6.0 | Java 17+
| https://github.com/eclipse/jetty.project/tree/jetty-11.0.x[jetty-11.0.x] | Maintenance | Servlet 5.0 | Java 11+
| https://github.com/eclipse/jetty.project/tree/jetty-10.0.x[jetty-10.0.x] | Maintenance | Servlet 4.0 | Java 11+
| https://github.com/eclipse/jetty.project/tree/jetty-9.4.x[jetty-9.4.x] | End of Community Support | Servlet 3.1 | Java 8
| https://github.com/eclipse/jetty.project/tree/jetty-9.3.x[jetty-9.3.x] | End of Life | Servlet 3.1 | Java 8
| jetty-8 | Historical | Servlet 3.1 | Java 6
| jetty-7 | Mythical | Servlet 2.5 | Java 5
| https://github.com/eclipse/jetty.project/tree/jetty-9.4.x[jetty-9.4.x] | link:https://github.com/eclipse/jetty.project/issues/7958[End of Community Support] | Servlet 3.1 | Java 8+
|===
Maintenance branches are periodically merged wholesale into active development branches.
As such, *changes to maintenance branches should typically be forward compatible* with later releases.
Maintenance branches are periodically merged into active development branches.
Older branches are only updated if they get specifically targeted by a pull request.
Also, changes to older branches aren't regularly merged forward -- although an individual change may be cherry-picked forward, depending on the nature of the fix.

View File

@ -11,28 +11,29 @@
// ========================================================================
//
[[cg-building-jetty]]
[[cg-build]]
== Building Jetty
Jetty's uses http://maven.apache.org/[Apache Maven] for builds.
To successfully build the project, you will also need a recent version of the https://www.oracle.com/java/technologies/downloads/[Java Development Kit (JDK)].
[[cg-maven-jdk-requirements]]
[[cg-build-requirements]]
=== Maven and JDK requirements
Here are the minimum Maven and JDK version build requirements for each actively maintained branch.
.Build versioning requirements by branch
[cols="4"]
|===
| Branch | Maven Version | Minimum JDK | Recommended JDK
| Branch | Maven Version | Minimum JDK
| jetty-10.0.x | Maven 3.8.6+ | OpenJDK 11 | OpenJDK 17 (for optional virtual threads and HTTP/3 support)
| jetty-11.0.x | Maven 3.8.6+ | OpenJDK 11 | OpenJDK 17 (for optional virtual threads and HTTP/3 support)
| jetty-12.0.x | Maven 3.8.6+ | OpenJDK 17 | OpenJDK 17
| jetty-12.0.x | Maven 3.8.6+ | OpenJDK 17+
| jetty-11.0.x | Maven 3.8.6+ | OpenJDK 11+
| jetty-10.0.x | Maven 3.8.6+ | OpenJDK 11+
|===
[[cg-fast-build]]
To build the Jetty documentation, OpenJDK 19+ is required due to the use of the virtual thread APIs.
[[cg-build-fast]]
=== Running a fast build
To get started with Jetty as quickly as possible, navigate to your local copy of the Jetty repo and run:
@ -44,20 +45,25 @@ mvn -Pfast clean install
The `-Pfast` flag tells Maven to bypass running tests and other checks.
[[cg-full-build]]
[[cg-build-full]]
=== Running a full build
To build Jetty and automatically run all tests, run:
[source, shell]
----
mvn install
mvn clean install
----
The full build takes substantial time and memory, as it runs hundreds of test cases -- many of which spin up embedded instances of Jetty itself.
The build also runs stress tests that may require you (depending on your hardware or operating system) to set you file descriptor limit to a value greater than 2048.
You can view or set your file descriptor limit by running `ulimit -n [new_value]`.
You can view or set your file descriptor limit by running:
[source, shell]
----
$ ulimit -n [new_value]
----
[TIP]
.Flagging flaky tests
@ -66,7 +72,7 @@ Not all test cases are as timing independent as they should be, which can result
You can help us track these flaky tests by opening an https://github.com/eclipse/jetty.project/issues[issue] when you come across one.
====
[[cg-parallel-execution]]
[[cg-build-parallel]]
=== Executing tests in parallel
Jetty uses https://junit.org/junit5/docs/current/user-guide/#writing-tests-parallel-execution[Junit5's parallel execution] to run test cases in parallel.
@ -95,10 +101,10 @@ Certain tests cannot be run in parallel because they access or modify `static`
Maven will run these tests in isolation even when parallel execution is explicitly enabled.
====
[[cg-option-build-tools]]
[[cg-build-optional-tools]]
=== Optional build tools
* https://graphviz.org/[Graphviz]: used by Asciidoctor in the `jetty-documentation` module to produce various graphs. See <<cg-documentation>> for more information.
* https://graphviz.org/[Graphviz]: used by Asciidoctor in the `jetty-documentation` module to produce various link:https://plantuml.com/[PlantUML] graphs.
* https://www.docker.com/[Docker]: used to run some integration tests for testing third party integrations.
[[cg-build-artifacts]]
@ -106,14 +112,14 @@ Maven will run these tests in isolation even when parallel execution is explicit
Once the build is complete, you can find the built Jetty Maven artifacts in your Maven local repository, along with the following locations of note:
[cols="3"]
[cols="1a,2a,2a"]
|===
| Branch(es) | Location | Description
| all | `jetty-home/target/jetty-home-<ver>.tar.gz` | The Jetty Home distribution
| `jetty-10.0.x` | `jetty-runner/target/jetty-runner-<ver>.jar` | The Jetty Runner distribution
| `jetty-11.0.x` | `jetty-runner/target/jetty-runner-<ver>.jar` | The Jetty Runner distribution
| `jetty-12.0.x` | `jetty-ee10/jetty-ee10-runner/target/jetty-ee10-runner-<ver>.jar` | The Jetty Runner distribution for EE10/Servlet 6 (`jakarta.servlet`) webapps
| `jetty-12.0.x` | `jetty-ee9/jetty-ee9-runner/target/jetty-ee9-runner-<ver>.jar` | The Jetty Runner distribution for EE9/Servlet 5 (`jakarta.servlet`) webapps
| `jetty-12.0.x` | `jetty-ee8/jetty-ee8-runner/target/jetty-ee8-runner-<ver>.jar` | The Jetty Runner distribution for EE8/Servlet 4 (`javax.servlet`) webapps
| `jetty-11.0.x` | `jetty-runner/target/jetty-runner-<ver>.jar` | The Jetty Runner distribution for EE9/Servlet 5 (`jakarta.servlet`) webapps
| `jetty-10.0.x` | `jetty-runner/target/jetty-runner-<ver>.jar` | The Jetty Runner distribution for EE8/Servlet 4 (`javax.servlet`) webapps
|===

View File

@ -15,7 +15,7 @@
== Code Standards
This section outlines the various coding conventions and standards we use throughout the Jetty codebase.
[[cg-ide-configuration]]
[[cg-code-standards-ide]]
=== Configuring your IDE
IntelliJ IDE::
@ -28,41 +28,38 @@ Eclipse IDE::
An Eclipse code style XML file is available in the source repo at
https://github.com/eclipse/jetty.project/blob/jetty-10.0.x/build-resources/jetty-codestyle-eclipse-ide.xml[`/build-resources/jetty-codestyle-eclipse-ide.xml`].
[[cg-java-conventions]]
[[cg-code-standards-java]]
=== Java conventions
The following code sample shows some basic Java styles and conventions used throughout the Jetty codebase:
[source, java]
----
import some.exact.ClassName; // GOOD
import some.wildcard.package.*; // BAD!
package org.always.have.a.package;
/* --------------------------------------------------------- */
/** All classes should have a javadoc
/**
* All classes should have a javadoc
*/
class MyClassName
{
// Use 4 spaces to indent.
// The code must format OK with default tab size of 8.
private static final int ALL_CAPS_FOR_PUBLIC_CONSTANTS=1;
private static final int ALL_CAPS_FOR_PUBLIC_CONSTANTS = 1;
// Prefix static fields with two underscores (__)
// and normal fields with one underscore (_). This
// Prefix fields with one underscore (_). This
// convention is not mandatory, but the chosen style
// should be used consistently within a single class.
private static String __staticField;
private Object _privateField;
// Use getters and setters rather than public fields.
// Braces always on new line.
public void setPrivateField(Object privateField)
{
_privateField=privateField;
_privateField = privateField;
}
public Object getPrivateField()
@ -70,20 +67,19 @@ class MyClassName
return _privateField;
}
public void doSomething()
throws SomeException
public void doSomething() throws SomeException
{
Object local_variable = _privateField;
if (local_variable==null)
// Braces always on new line.
if (local_variable == null)
{
// do Something
}
}
}
----
[[cg-logging-conventions]]
[[cg-code-standards-logging]]
=== Logging conventions
When deciding when and what to log, bear in mind a few things:
@ -92,48 +88,46 @@ When deciding when and what to log, bear in mind a few things:
* Avoid polluting the log with very long stack traces.
* Don't routinely produce logging events in response to data sent by a user.
* Only call one `LOG` method for a given event, to avoid generating confusingly interleaved log messages.
* Never call `LOG.warn()` right before throwing an exception, as this will result in double handling.
* Never call `LOG.warn()` right before throwing an exception, as this will likely result in double logging the exception.
* Avoid calling `LOG.debug()` right before throwing an exception, as this will make debug logs verbose while adding little information.
* When interacting with a request or other client-provided data, *do not log* unless `LOG.isDebugEnabled()` is true, and then use `DEBUG`-level logging:
* When interacting with a request or other client-provided data that result in an exception, use `DEBUG`-level logging:
+
[source, java]
----
catch (Throwable t)
{
if (LOG.isDebugEnabled())
LOG.debug("Something happened {} {} {}",x, y, z, t);
}
catch (Throwable t)
{
if (LOG.isDebugEnabled())
LOG.debug("Something happened {} {} {}",x, y, z, t);
}
----
* When calling into application code that throws an exception, use `INFO`-level logging, and gate the log with `LOG.isDebugEnabled()` to reduce the size of logging stack traces:
+
[source, java]
----
catch (Throwable t)
{
catch (Throwable t)
{
if (LOG.isDebugEnabled())
LOG.info("Something happened {} {} {}", x, y, z, t);
LOG.info("Something happened {} {} {}", x, y, z, t);
else
LOG.info("Something happened {} {} {} {}", x, y, z, t.toString());
}
LOG.info("Something happened {} {} {} {}", x, y, z, t.toString());
}
----
* When exceptions happen in Jetty code:
** Mostly use the `WARN` or `ERROR` level.
** If the exception is (1) not entirely unexpected, (2) can happen relatively frequently, or (3) can potentially have a very long stack trace, you can use `LOG.isDebugEnabled()` to cut down on the size of the logging of the stacktrace:
* When exceptions happen in Jetty code, and if the exception is (1) not entirely unexpected, (2) can happen relatively frequently, or (3) can potentially have a very long stack trace, you can use `LOG.isDebugEnabled()` to cut down on the size of the logging of the stacktrace:
+
[source, java]
----
catch (Throwable t)
{
catch (Throwable t)
{
if (LOG.isDebugEnabled())
LOG.warn("Something happened {} {} {}", x, y, z, t);
LOG.warn("Something happened {} {} {}", x, y, z, t);
else
LOG.warn("Something happened {} {} {} {}", x, y, z, t.toString());
}
LOG.warn("Something happened {} {} {} {}", x, y, z, t.toString());
}
----
[TIP]
====
By default, Jetty's logger outputs a full stacktrace whether you call it like `LOG.warn("Something happened", t)` or `LOG.warn("Something happened {}", t)`.
If you only want the log message, you need to do call `.toString()` on the caught exception, e.g., `LOG.warn("Something happened {}", t.toString())`.
If you only want the log message but not the stack trace, you need to do call `.toString()` on the caught exception, e.g., `LOG.warn("Something happened {}", t.toString())`.
====

View File

@ -20,21 +20,21 @@ Another great way to contribute to Jetty is to help us write and maintain our do
=== Documentation guides
Jetty's documentation is grouped into three guides, each written for a different target audience.
<<og-intro,Operations Guide>>::
Operations Guide::
Targets sysops, devops, and developers who want to run Jetty as a standalone web server.
<<pg-intro,Programming Guide>>::
Programming Guide::
Targets developers who want to use the Jetty libraries in their applications.
<<cg-intro,Contribution Guide>>::
Contribution Guide::
Targets developers and writers who want to make contributions to the Jetty project.
[[cg-doc-toolchain]]
[[cg-documentation-toolchain]]
=== The documentation toolchain
Jetty follows a https://www.writethedocs.org/guide/docs-as-code/["docs as code"] philosophy, meaning *we use the same tools to write and build our code and docs*.
As such, the docs are maintained directly within the Jetty codebase at https://github.com/eclipse/jetty.project/tree/jetty-12.0.x/documentation/jetty-documentation/src/main/asciidoc[`documentation/jetty-documentation/src/main/asciidoc/`].
[[cg-asciidoc]]
[[cg-documentation-asciidoc]]
==== AsciiDoc
Our docs are written in https://asciidoc.org/[AsciiDoc], a markup language for writing technical content.
AsciiDoc supports many advanced features, such as robust linking across different documentation sets, while remaining human-readable.
@ -42,23 +42,23 @@ AsciiDoc supports many advanced features, such as robust linking across differen
Although Jetty takes advantage of many of these features, you don't need to be an AsciiDoc expert to contribute to our documentation.
If you _are_ interested in learning the ins and outs of AsciiDoc, the https://docs.asciidoctor.org/asciidoc/latest/[official language documentation] is a good place to start.
[[cg-maven-asciidoctor]]
[[cg-documentation-asciidoctor]]
==== Maven and Asciidoctor
In addition to using Maven to <<cg-building-jetty,build the Jetty codebase>>, we use it to build our docs.
In addition to using Maven to xref:cg-build[build the Jetty codebase], we use it to build our docs.
During a build, Maven converts AsciiDoc-formatted docs into the HTML pages that you are reading right now.
https://asciidoctor.org/[Asciidoctor] is the tool that actually performs this compilation step.
Maven integrates with Asciidoctor via a plugin called (appropriately enough) https://docs.asciidoctor.org/maven-tools/latest/[`asciidoctor-maven-plugin`].
Maven integrates with Asciidoctor via the https://docs.asciidoctor.org/maven-tools/latest/[`asciidoctor-maven-plugin`].
[[cg-documentation-build]]
=== Building the docs
Since Jetty's docs are maintained in git alongside the rest of the Jetty codebase, you'll need to <<cg-getting-source,check out a local copy>> of the code to contribute to the docs.
Since Jetty's docs are maintained in `git` alongside the rest of the Jetty codebase, you'll need to xref:cg-source[check out a local copy] of the code to contribute to the docs.
The docs are maintained as a separate module within Jetty, which means you can build the docs separately from the rest of the project.
To do so, run `mvn install` from the `documentation/jetty-documentation` subdirectory.
To do so, run `mvn clean install` from the `documentation/jetty-documentation` subdirectory.
[source, screen]
[source, shell]
----
$ cd jetty.project/documentation
$ mvn install
@ -80,8 +80,7 @@ This is Maven setting up the execution environment, which it uses to generate th
When the build completes, you can view the generated docs in your preferred web browser by opening file:///path/to/jetty.project/documentation/jetty-documentation/target/html/index.html on your local filesystem.
[[cg-documentation-structure]]
[[cg-documentation-build-structure]]
==== Documentation project structure
The documentation root is https://github.com/eclipse/jetty.project/tree/jetty-10.0.x/documentation/jetty-documentation[`documentation/jetty-documentation/`].
@ -91,11 +90,11 @@ https://github.com/eclipse/jetty.project/tree/jetty-10.0.x/documentation/jetty-d
The primary root for all documentation content.
https://github.com/eclipse/jetty.project/tree/jetty-10.0.x/documentation/jetty-documentation/src/main/asciidoc/config.adoc[`src/main/asciidoc/config.adoc`]::
This file contains metadata and global variables shared across all the <<cg-documentation-guides,documentation guides>>.
This file contains metadata and global variables shared across all the xref:cg-documentation-guides[documentation guides].
This configuration is used by Asciidoctor to correctly render the final docs.
`src/main/asciidoc/*-guide`::
Secondary root directories for each individual <<cg-documentation-guides,documentation guide>>.
Secondary root directories for each individual xref:cg-documentation-guides[documentation guide].
`src/main/asciidoc/*-guide/index.adoc`::
Asciidoctor's "point of entry" for each guide.
@ -105,16 +104,15 @@ Also, guide-specific metadata and variables that wouldn't belong in the root `co
`target/<format>`::
The final build destination for any docs generated by Maven.
By default, docs are generated into `target/html`, but other formats (e.g., `pdf` and `epub`) are available.
This directory is not checked into git.
This directory is not checked into `git`.
[[cg-documentation-style-guide]]
[[cg-documentation-style]]
=== Style guide
The following conventions are not set in stone, but you are encouraged to follow them where possible.
Stylistically consistency helps keep the docs easy to both understand and maintain.
[[cg-ventilated-prose]]
[[cg-documentation-style-prose]]
==== Ventilated prose
In markup, *each sentence should be on its own line with a hard return at the end of the line*.
@ -127,56 +125,38 @@ This practice makes for more readable file diffs, and also makes it easier to co
AsciiDoc treats a single line breaks just like a space, so it will render ventilated prose naturally.
====
[[cg-documenting-versions]]
[[cg-documentation-versions]]
==== Documenting versions
[[cg-documenting-version-changes]]
===== Documenting changes in functionality
Use subsections to flag major changes in functionality between versions of Jetty.
The subsection's title should specifically note the relevant version(s) -- e.g., _Prior to: Version X.Y_ or _In version: X.Y_.
For minor differences in functionality, a `[NOTE]` or `[WARNING]` <<cg-admonitions,admonition>> may be sufficient.
[[cg-documenting-multiple-versions]]
[[cg-documentation-versions-multiple]]
===== Documenting multiple versions at once
Jetty 12 features many parallel modules with similar names and functionality, but which target different versions of Jakarta EE.
For instance, the `ee8-deploy`, `ee9-deploy`, and `ee10-deploy` modules all behave similarly, except they target Jakarta EE8, EE9, and EE10, respectively.
Whenever possible, *try to consolidate these types of parallel references*.
For instance, you can quickly refer to all three of the aforementioned modules as a group by writing `ee{8,9,10}-deploy`, `eeN-deploy`, or even just `ee-deploy`.
For instance, you can quickly refer to all three of the aforementioned modules as a group by writing `{ee-all}-deploy` or `eeN-deploy`.
Another approach is to write your docs targeting one specific module, and tell the reader what substitution(s) they would need to make to target a different module.
[NOTE]
====
When targeting a specific version in your docs for demonstration purposes, you should prefer to use the most recent version number.
For the example above, this would mean targeting `ee10-deploy`.
For the example above, this would mean targeting `{ee-current}-deploy`.
====
Consolidating parallel references saves readers from having to sift through repetitive material, and helps us avoid maintaining multiple versions of nearly identical docs.
[[cg-documenting-versions-in-examples]]
[[cg-documentation-versions-multiple-example]]
===== Dealing with multiple versions in code examples
Instead of referencing multiple versions in your code and command-line examples, it's generally better to target one specific version.
For example, let's say you're telling the reader how to install the `ee-deploy` family of modules:
Instead of referencing multiple versions in your code and command-line examples, it's generally better to target one specific version, typically the latest (currently `{ee-current}`):
java -jar $JETTY_HOME/start.jar --add-modules=ee-deploy
Any reader who copy-pastes the above into their command line will get a failure:
[source,options=nowrap,subs=attributes]
[source,subs=attributes]
----
include::jetty[args="--add-modules=ee-deploy"]
$ java -jar $JETTY_HOME/start.jar --add-modules={ee-current}-deploy
----
Instead, target the `ee10-deploy` module specifically:
java -jar $JETTY_HOME/start.jar --add-modules=ee10-deploy
This will work when copy-pasted into the command line.
[NOTE]
@ -184,8 +164,8 @@ This will work when copy-pasted into the command line.
You may want to remind the reader to change the `10` in the command to their preferred target version -- although doing so isn't strictly necessary for a simple example like above.
====
[[cg-license-blocks]]
==== License blocks
[[cg-documentation-license]]
=== License blocks
Each `.adoc` file should contain the license block that exists in the `index.adoc` file.
For reference, here is a standard license header:
@ -204,10 +184,10 @@ For reference, here is a standard license header:
//
----
[[cg-asciidoc-conventions]]
[[cg-documentation-asciidoc-conventions]]
=== AsciiDoc conventions
[[cg-custom-ids]]
[[cg-documentation-asciidoc-conventions-ids]]
==== Custom IDs
We rely heavily on https://docs.asciidoctor.org/asciidoc/latest/sections/custom-ids/[custom IDs] for generating stable documentation URLs and linking within docs.
@ -223,23 +203,21 @@ To help deal with this constraint, we used different ID prefixes in each guide:
* Contribution Guide: `cg-`
====
[[cg-images]]
[[cg-documentation-asciidoc-conventions-images]]
==== Images
Images should live in the `images/` directory of the guide they appear in.
Use the `image::` directive to include an image, like so:
----
image::small_powered_by.gif[image,width=340]
image::small_powered_by.gif[image,width=145]
----
image::small_powered_by.gif[image,width=340]
image::small_powered_by.gif[image,width=145]
[[cg-admonitions]]
[[cg-documentation-asciidoc-conventions-admonitions]]
==== Admonitions
Admonitions (a.k.a. "callout blocks") are useful for flagging information that doesn't belong in the natural flow of text.
Admonitions (or "callout blocks") are useful for flagging information that doesn't belong in the natural flow of text.
Asciidoc supports five levels of admonition:
* `[NOTE]`
@ -275,13 +253,3 @@ Places where you have to be careful what you are doing.
Where extreme care has to be taken.
Data corruption or other nasty things may occur if these warnings are ignored.
====
[cg-documentation-troubleshooting]
=== Troubleshooting
Pay close attention to the build output for lines like:
asciidoctor: WARNING: 9-jsp.adoc: line 0: id assigned to section already in use: ag-http2
This error indicates that a custom ID is being reused somewhere.
The ID conflict should be resolved, or else deep linking will work incorrectly.

View File

@ -11,24 +11,24 @@
// ========================================================================
//
[[cg-submitting-patches]]
[[cg-patches]]
== Submitting Patches
We wholeheartedly welcome contributions to Jetty.
While not every contribution will be accepted, our commitment is to work with interested parties on the things they care about.
[[cg-git-config]]
=== Configuring git
[[cg-patches-git-config]]
=== Configuring `git`
The email in your git commits must match the email you used to <<cg-eca,sign the Eclipse Contributor Agreement>>.
The email in your git commits must match the email you used to xref:cg-eca[sign the Eclipse Contributor Agreement].
As such, you'll likely want to configure `user.email` in git accordingly.
See link:https://help.github.com/articles/setting-your-email-in-git[this guide] on GitHub for details on how to do so.
[[cg-commit-messages]]
[[cg-patches-git-commit-messages]]
==== Writing commit messages
If your pull request addresses a particular issue in our repository, then the commit message should reference the issue.
Specifically, the message should follow the form *Issue #<XXX> <description of the commit>*:
Specifically, the message should follow the form *Issue #<NNN> <description of the commit>*:
[source, shell]
----
@ -37,38 +37,17 @@ $ git commit -s -m "Issue #123 resolving the issue by adding widget"
Using this format will ensure that the commit will be included in `VERSIONS.txt` upon new releases of Jetty.
[[cg-making-the-commit]]
[[cg-patches-git-commit-signing]]
=== Signing the commit
You must sign off on every commit in your pull request using git's https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---signoff[signoff] feature (`git commit -s`).
Without this signoff, your patch will be automatically rejected before it can be incorporated into to the Jetty repository.
*There is nothing the Jetty committers can do to bypass this check.*
You should sign off on every commit in your pull request using git's https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---signoff[signoff] feature (`git commit -s`).
[NOTE]
.Why do my commits need the signoff flag if I already signed the ECA?
====
By signing the ECA, you are indicating that you are free to contribute to Eclipse; however, that doesn't mean every line of code you ever write is subject to the agreement!
Signing off on your individual commits clearly indicates that you are submitting your code under the auspices of the ECA.
====
[TIP]
====
If you made a commit but forgot to pass the `-s` flag, you can retroactively add a signoff by running:
[source,shell]
----
git commit --amend --signoff
----
====
[[cg-pull-requests]]
[[cg-patches-pull-requests]]
=== Creating pull requests
Please see https://help.github.com/articles/creating-a-pull-request[GitHub's documentation for creating pull requests].
[[cg-time-frames]]
[[cg-patches-time-frames]]
=== Time frames
We do our best to process contributions in a timely fashion.

View File

@ -17,11 +17,11 @@
There are a number of ways to report security issues to the Jetty project.
* If the issue is directly related to Jetty itself then you are encouraged to report to the Jetty developers directly at mailto:security@webtide.com[security@webtide.com].
Since Webtide comprises the active committers of the Jetty project, this is our preferred reporting method.
link:https://webtide.com[Webtide] employs the active committers of the Jetty project, so this is the preferred reporting method.
[IMPORTANT]
====
We prefer you report any security issues directly to the Jetty developers mailto:security@webtide.com[via email] rather than via GitHub Issues, as the latter https://github.com/isaacs/github/issues/37[does not support private issues].
We prefer you report any security issues directly to the Jetty developers mailto:security@webtide.com[via email] rather than via GitHub Issues, as GitHub https://github.com/isaacs/github/issues/37[does not support private issues].
====
* If the issue is related to Eclipse or its Jetty integration then we encourage you to reach out to mailto:security@eclipse.org[security@eclipse.org].

View File

@ -11,13 +11,14 @@
// ========================================================================
//
include::../config.adoc[]
:doctitle: link:https://eclipse.org/jetty[Eclipse Jetty]: Contribution Guide
:toc-title: Contribution Guide
:idprefix: cg-
:breadcrumb: Home:../index.html | Contribution Guide:./index.html
:toclevels: 3
include::../config.adoc[]
include::.asciidoctorconfig[]
include::1-introduction.adoc[]
include::2-eca.adoc[]
include::3-source.adoc[]

View File

@ -11,12 +11,12 @@
// ========================================================================
//
include::../config.adoc[]
:doctitle: link:https://eclipse.dev/jetty[Eclipse Jetty]: Operations Guide
:toc-title: Operations Guide
:idprefix: og-
:docinfo: private-head
include::../config.adoc[]
include::.asciidoctorconfig[]
include::introduction.adoc[]
include::begin/chapter.adoc[]

View File

@ -11,12 +11,12 @@
// ========================================================================
//
include::../config.adoc[]
:doctitle: link:https://eclipse.org/jetty[Eclipse Jetty]: Programming Guide
:doctitle: link:https://eclipse.dev/jetty[Eclipse Jetty]: Programming Guide
:toc-title: Programming Guide
:idprefix: pg-
:docinfo: private-head
include::../config.adoc[]
include::.asciidoctorconfig[]
include::introduction.adoc[]
include::client/client.adoc[]

View File

@ -14,7 +14,7 @@
[[jetty-jspc-maven-plugin]]
=== Jetty Jspc Maven Plugin
This plugin will help you pre-compile your jspc and works in conjunction with the Maven war plugin to put them inside an assembled war.
This plugin will help you pre-compile your JSP and works in conjunction with the Maven war plugin to put them inside an assembled war.
[[jspc-config]]
==== Configuration