Skip to content

Commit 3d3dfe4

Browse files
authored
Merge branch 'master' into expiring-tokens
2 parents c7bb0bb + 1366fa9 commit 3d3dfe4

File tree

8 files changed

+104
-32
lines changed

8 files changed

+104
-32
lines changed

.github/workflows/publish-release-artifact.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ jobs:
7474
wget -q https://get.jenkins.io/${REPO}/${PROJECT_VERSION}/${FILE_NAME}
7575
- name: Upload Release Asset
7676
id: upload-war
77-
uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
77+
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
7878
env:
7979
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
8080
with:
@@ -109,7 +109,7 @@ jobs:
109109
- name: Upload Release Asset
110110
id: upload-deb
111111
if: always()
112-
uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
112+
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
113113
env:
114114
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
115115
with:
@@ -146,7 +146,7 @@ jobs:
146146
- name: Upload Release Asset
147147
id: upload-rpm
148148
if: always()
149-
uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
149+
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
150150
env:
151151
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
152152
with:
@@ -182,7 +182,7 @@ jobs:
182182
- name: Upload Release Asset
183183
id: upload-msi
184184
if: always()
185-
uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
185+
uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
186186
env:
187187
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
188188
with:

README.md

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,32 @@
22
<img width="400" src="https://www.jenkins.io/images/jenkins-logo-title-dark.svg" alt="Jenkins logo">
33
</a>
44

5-
# About
6-
75
[![Jenkins Regular Release](https://img.shields.io/endpoint?url=https%3A%2F%2Fwww.jenkins.io%2Fchangelog%2Fbadge.json)](https://www.jenkins.io/changelog)
86
[![Jenkins LTS Release](https://img.shields.io/endpoint?url=https%3A%2F%2Fwww.jenkins.io%2Fchangelog-stable%2Fbadge.json)](https://www.jenkins.io/changelog-stable)
97
[![Docker Pulls](https://img.shields.io/docker/pulls/jenkins/jenkins.svg)](https://hub.docker.com/r/jenkins/jenkins/)
108
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3538/badge)](https://bestpractices.coreinfrastructure.org/projects/3538)
119
[![Reproducible Builds](https://img.shields.io/badge/Reproducible_Builds-ok-green)](https://maven.apache.org/guides/mini/guide-reproducible-builds.html)
1210
[![Gitter](https://img.shields.io/gitter/room/jenkinsci/jenkins)](https://app.gitter.im/#/room/#jenkinsci_jenkins:gitter.im)
1311

12+
---
13+
14+
# Table of Contents
15+
16+
- [About](#about)
17+
- [What to Use Jenkins for and When to Use It](#what-to-use-jenkins-for-and-when-to-use-it)
18+
- [Downloads](#downloads)
19+
- [Getting Started (Development)](#getting-started-development)
20+
- [Source](#source)
21+
- [Contributing to Jenkins](#contributing-to-jenkins)
22+
- [News and Website](#news-and-website)
23+
- [Governance](#governance)
24+
- [Adopters](#adopters)
25+
- [License](#license)
26+
27+
---
28+
29+
# About
30+
1431
In a nutshell, Jenkins is the leading open-source automation server.
1532
Built with Java, it provides over 2,000 [plugins](https://plugins.jenkins.io/) to support automating virtually anything,
1633
so that humans can spend their time doing things machines cannot.
@@ -39,35 +56,64 @@ For all distributions Jenkins offers two release lines:
3956
Older release line which gets periodically updated via bug fix backports.
4057

4158
Latest releases:
59+
4260
[![Jenkins Regular Release](https://img.shields.io/endpoint?url=https%3A%2F%2Fwww.jenkins.io%2Fchangelog%2Fbadge.json)](https://www.jenkins.io/changelog)
4361
[![Jenkins LTS Release](https://img.shields.io/endpoint?url=https%3A%2F%2Fwww.jenkins.io%2Fchangelog-stable%2Fbadge.json)](https://www.jenkins.io/changelog-stable)
4462

63+
# Getting Started (Development)
64+
65+
For more information on setting up your development environment, contributing, and working with Jenkins internals, check the [contributing guide](CONTRIBUTING.md) and the [Jenkins Developer Documentation](https://www.jenkins.io/doc/developer/).
66+
4567
# Source
4668

4769
Our latest and greatest source of Jenkins can be found on [GitHub](https://github.com/jenkinsci/jenkins). Fork us!
4870

4971
# Contributing to Jenkins
5072

51-
Follow the [contributing guidelines](CONTRIBUTING.md) if you want to propose a change in the Jenkins core.
73+
New to open source or Jenkins? Here’s how to get started:
74+
75+
- Read the [Contribution Guidelines](CONTRIBUTING.md)
76+
- Check our [good first issues](https://github.com/jenkinsci/jenkins/issues?q=is%3Aissue%20is%3Aopen%20label%3A%22good%20first%20issue%22)
77+
- Join our [Gitter chat](https://app.gitter.im/#/room/#jenkinsci_newcomer-contributors:gitter.im) for questions and help
78+
5279
For more information about participating in the community and contributing to the Jenkins project,
5380
see [this page](https://www.jenkins.io/participate/).
5481

5582
Documentation for Jenkins core maintainers is in the [maintainers guidelines](docs/MAINTAINERS.adoc).
5683

5784
# News and Website
5885

59-
All information about Jenkins can be found on our [website](https://www.jenkins.io/).
60-
Follow us on [Twitter](https://twitter.com/jenkinsci) or [LinkedIn](https://www.linkedin.com/company/jenkins-project/).
86+
All information about Jenkins can be found on our [official website](https://www.jenkins.io/), including documentation, blog posts, plugin listings, community updates, and more.
87+
88+
Stay up-to-date with the latest Jenkins news, tutorials, and release notes:
89+
90+
- [Jenkins Blog](https://www.jenkins.io/blog/)
91+
- [Documentation](https://www.jenkins.io/doc/)
92+
- [Plugins Index](https://plugins.jenkins.io/)
93+
- [Events](https://www.jenkins.io/events/)
94+
95+
Follow Jenkins on social media to stay connected with the community:
96+
97+
- [Twitter / X](https://x.com/jenkinsci)
98+
- [YouTube](https://www.youtube.com/@jenkinscicd)
99+
- [LinkedIn](https://www.linkedin.com/company/jenkins-project/)
61100

62101
# Governance
63102

64-
See the [Jenkins Governance Document](https://www.jenkins.io/project/governance/) for information about the project's open governance, our philosophy and values, and development practices.
65-
Jenkins Code of Conduct can be found [here](https://www.jenkins.io/project/conduct/).
103+
The Jenkins project is governed by an open source community.
104+
To learn more about the governance structure, project leadership, and how decisions are made, visit the [Governance Page](https://www.jenkins.io/project/governance/).
66105

67106
# Adopters
68107

69-
Jenkins is used by millions of users and thousands of companies.
70-
See [adopters](https://www.jenkins.io/project/adopters/) for the list of Jenkins adopters and their success stories.
108+
Jenkins is trusted by **millions of users** and adopted by **thousands of companies** around the world — from startups to enterprises — to automate their software delivery pipelines.
109+
110+
Explore the [Adopters Page](https://www.jenkins.io/project/adopters/) and https://stories.jenkins.io to see:
111+
112+
- Companies and organizations using Jenkins
113+
- Success stories and case studies
114+
- How Jenkins is used in different industries
115+
116+
> If your company uses Jenkins and you'd like to be featured, feel free to [submit your story](https://www.jenkins.io/project/adopters/contributing/#share-your-story)!
71117
72118
# License
73119

core/src/main/java/jenkins/security/csp/AvatarContributor.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import hudson.ExtensionList;
3030
import java.net.URI;
3131
import java.net.URISyntaxException;
32+
import java.util.Locale;
3233
import java.util.Set;
3334
import java.util.concurrent.ConcurrentHashMap;
3435
import java.util.logging.Level;
@@ -106,9 +107,10 @@ public static String extractDomainFromUrl(@CheckForNull String url) {
106107
LOGGER.log(Level.FINER, "Ignoring URI without host: " + url);
107108
return null;
108109
}
109-
String domain = host;
110-
final String scheme = uri.getScheme();
110+
String domain = host.toLowerCase(Locale.ROOT);
111+
String scheme = uri.getScheme();
111112
if (scheme != null) {
113+
scheme = scheme.toLowerCase(Locale.ROOT);
112114
if (scheme.equals("http") || scheme.equals("https")) {
113115
domain = scheme + "://" + domain;
114116
} else {

core/src/test/java/jenkins/security/csp/AvatarContributorTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,4 +80,9 @@ void testExtractDomainFromUrl_Ipv4Address() {
8080
void testExtractDomainFromUrl_Ipv4WithPort() {
8181
assertThat(extractDomainFromUrl("https://192.168.1.1:8080/avatar.png"), is("https://192.168.1.1:8080"));
8282
}
83+
84+
@Test
85+
void testExtractDomainFromUrl_CaseInsensitivity() {
86+
assertThat(extractDomainFromUrl("hTTps://EXAMPLE.com/path/to/avatar.png"), is("https://example.com"));
87+
}
8388
}

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@
4141
"postcss-loader": "8.2.0",
4242
"postcss-preset-env": "10.4.0",
4343
"postcss-scss": "4.0.9",
44-
"prettier": "3.6.2",
44+
"prettier": "3.7.2",
4545
"sass": "1.94.2",
4646
"sass-loader": "16.0.6",
4747
"style-loader": "4.0.0",
48-
"stylelint": "16.26.0",
48+
"stylelint": "16.26.1",
4949
"stylelint-checkstyle-reporter": "1.1.1",
5050
"stylelint-config-standard-scss": "16.0.0",
5151
"webpack": "5.103.0",

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ THE SOFTWARE.
7373
</issueManagement>
7474

7575
<properties>
76-
<revision>2.540</revision>
76+
<revision>2.541</revision>
7777
<changelist>-SNAPSHOT</changelist>
78-
<project.build.outputTimestamp>2025-11-25T15:01:04Z</project.build.outputTimestamp>
78+
<project.build.outputTimestamp>2025-12-02T12:31:26Z</project.build.outputTimestamp>
7979

8080
<!-- configuration for patch tracker plugin -->
8181
<project.patchManagement.system>github</project.patchManagement.system>
@@ -281,7 +281,7 @@ THE SOFTWARE.
281281
<dependency>
282282
<groupId>com.puppycrawl.tools</groupId>
283283
<artifactId>checkstyle</artifactId>
284-
<version>12.1.2</version>
284+
<version>12.2.0</version>
285285
</dependency>
286286
</dependencies>
287287
<executions>

test/src/test/java/jenkins/security/csp/AvatarContributorTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,15 @@ void testAllow_UnsupportedSchemeDoesNotAddToCsp(JenkinsRule j) {
139139
assertThat(loggerRule, recorded(Level.FINER, is("Ignoring URI with unsupported scheme: ftp://files.example.com/avatar.png")));
140140
assertThat(loggerRule, recorded(Level.FINER, is("Ignoring URI without host: data:image/png;base64,iVBORw0KG...")));
141141
}
142+
143+
@Test
144+
void testAllow_CaseInsensitivity(JenkinsRule j) {
145+
LoggerRule loggerRule = new LoggerRule().record(AvatarContributor.class, Level.FINEST).capture(100);
146+
AvatarContributor.allow("hTTps://AVATARS.example.com/user/avatar.png");
147+
AvatarContributor.allow("HttPS://avatars.EXAMPLE.com/user/avatar.png");
148+
String csp = new CspBuilder().withDefaultContributions().build();
149+
assertThat(csp, is("base-uri 'none'; default-src 'self'; form-action 'self'; frame-ancestors 'self'; img-src 'self' data: https://avatars.example.com; script-src 'report-sample' 'self'; style-src 'report-sample' 'self' 'unsafe-inline';"));
150+
assertThat(loggerRule, recorded(Level.CONFIG, is("Adding domain 'https://avatars.example.com' from avatar URL: hTTps://AVATARS.example.com/user/avatar.png")));
151+
assertThat(loggerRule, recorded(Level.FINEST, is("Skipped adding duplicate domain 'https://avatars.example.com' from avatar URL: HttPS://avatars.EXAMPLE.com/user/avatar.png")));
152+
}
142153
}

yarn.lock

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,6 +1201,13 @@ __metadata:
12011201
languageName: node
12021202
linkType: hard
12031203

1204+
"@csstools/css-syntax-patches-for-csstree@npm:^1.0.19":
1205+
version: 1.0.20
1206+
resolution: "@csstools/css-syntax-patches-for-csstree@npm:1.0.20"
1207+
checksum: 10c0/335fcd24eb563068338153066d580bfdfc87b1e0f7650432a332e925c88d247a56f8e5851cd27dd68e49cde2dbeb465db60a51bb92a18e6721b5166b2e046d91
1208+
languageName: node
1209+
linkType: hard
1210+
12041211
"@csstools/css-tokenizer@npm:^3.0.4":
12051212
version: 3.0.4
12061213
resolution: "@csstools/css-tokenizer@npm:3.0.4"
@@ -3805,7 +3812,7 @@ __metadata:
38053812
languageName: node
38063813
linkType: hard
38073814

3808-
"file-entry-cache@npm:^11.1.0":
3815+
"file-entry-cache@npm:^11.1.1":
38093816
version: 11.1.1
38103817
resolution: "file-entry-cache@npm:11.1.1"
38113818
dependencies:
@@ -4469,12 +4476,12 @@ __metadata:
44694476
postcss-loader: "npm:8.2.0"
44704477
postcss-preset-env: "npm:10.4.0"
44714478
postcss-scss: "npm:4.0.9"
4472-
prettier: "npm:3.6.2"
4479+
prettier: "npm:3.7.2"
44734480
sass: "npm:1.94.2"
44744481
sass-loader: "npm:16.0.6"
44754482
sortablejs: "npm:1.15.6"
44764483
style-loader: "npm:4.0.0"
4477-
stylelint: "npm:16.26.0"
4484+
stylelint: "npm:16.26.1"
44784485
stylelint-checkstyle-reporter: "npm:1.1.1"
44794486
stylelint-config-standard-scss: "npm:16.0.0"
44804487
tippy.js: "npm:6.3.7"
@@ -6181,12 +6188,12 @@ __metadata:
61816188
languageName: node
61826189
linkType: hard
61836190

6184-
"prettier@npm:3.6.2":
6185-
version: 3.6.2
6186-
resolution: "prettier@npm:3.6.2"
6191+
"prettier@npm:3.7.2":
6192+
version: 3.7.2
6193+
resolution: "prettier@npm:3.7.2"
61876194
bin:
61886195
prettier: bin/prettier.cjs
6189-
checksum: 10c0/488cb2f2b99ec13da1e50074912870217c11edaddedeadc649b1244c749d15ba94e846423d062e2c4c9ae683e2d65f754de28889ba06e697ac4f988d44f45812
6196+
checksum: 10c0/df3d658df301face0918f8ecbd4354f32e1151d83a3a4720c7f252342baf631466568f708e0e57beea55bbc56415c40208adc76a91d5f1a88f3e743d0d775dc0
61906197
languageName: node
61916198
linkType: hard
61926199

@@ -6808,11 +6815,12 @@ __metadata:
68086815
languageName: node
68096816
linkType: hard
68106817

6811-
"stylelint@npm:16.26.0":
6812-
version: 16.26.0
6813-
resolution: "stylelint@npm:16.26.0"
6818+
"stylelint@npm:16.26.1":
6819+
version: 16.26.1
6820+
resolution: "stylelint@npm:16.26.1"
68146821
dependencies:
68156822
"@csstools/css-parser-algorithms": "npm:^3.0.5"
6823+
"@csstools/css-syntax-patches-for-csstree": "npm:^1.0.19"
68166824
"@csstools/css-tokenizer": "npm:^3.0.4"
68176825
"@csstools/media-query-list-parser": "npm:^4.0.3"
68186826
"@csstools/selector-specificity": "npm:^5.0.0"
@@ -6825,7 +6833,7 @@ __metadata:
68256833
debug: "npm:^4.4.3"
68266834
fast-glob: "npm:^3.3.3"
68276835
fastest-levenshtein: "npm:^1.0.16"
6828-
file-entry-cache: "npm:^11.1.0"
6836+
file-entry-cache: "npm:^11.1.1"
68296837
global-modules: "npm:^2.0.0"
68306838
globby: "npm:^11.1.0"
68316839
globjoin: "npm:^0.1.4"
@@ -6852,7 +6860,7 @@ __metadata:
68526860
write-file-atomic: "npm:^5.0.1"
68536861
bin:
68546862
stylelint: bin/stylelint.mjs
6855-
checksum: 10c0/6f501ff051aee4fc7713635c98bf6837f889b22fe86152cfed20365ffeee0acf9d751f94ff265433b532b2a1ab7a228fc1fda3f507859acb57a689268939553d
6863+
checksum: 10c0/3805dfe868abdcc5a62e5726eebe5e950432cfadfc5b47c2f103ef4dede8ee1eb8a1247c9ceb01a1739c0aba68865d79899d33a707256365bb2004664524908b
68566864
languageName: node
68576865
linkType: hard
68586866

0 commit comments

Comments
 (0)