Skip to content

Commit f22a6f8

Browse files
authored
Merge branch 'master' into fix-offline-install-logic
2 parents 893148f + 13e3fb4 commit f22a6f8

File tree

25 files changed

+549
-551
lines changed

25 files changed

+549
-551
lines changed

.github/FUNDING.yml

Lines changed: 0 additions & 2 deletions
This file was deleted.

.github/renovate.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,9 @@
9797
"datasourceTemplate": "maven"
9898
}
9999
],
100+
"lockFileMaintenance": {
101+
"enabled": true,
102+
"automerge": false
103+
},
100104
"labels": ["dependencies", "skip-changelog"]
101105
}

.github/workflows/announce-lts-rc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
discourse-author-username: jenkins-release-bot
1818
discourse-category: 23
1919
- name: Post on mailing list
20-
uses: dawidd6/action-send-mail@62a2d05b79935ad4fb90ce9079928099579c14ac # v9
20+
uses: dawidd6/action-send-mail@ba302ba66e88942841281c984a6b31ca6d6289e6 # v11
2121
with:
2222
server_address: smtp.gmail.com
2323
server_port: 465

.github/workflows/changelog.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
env:
3636
GITHUB_AUTH: github-actions:${{ secrets.GITHUB_TOKEN }}
3737
- name: Upload Changelog YAML
38-
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
38+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
3939
with:
4040
name: changelog.yaml
4141
path: changelog.yaml

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
steps:
1919
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
2020
- name: Set up JDK 21
21-
uses: actions/setup-java@fe779bf55ef683c9413269276a7588bb9cedf07a #v 5.0.0
21+
uses: actions/setup-java@1d018f9b8b9b505bb578a83b230fabcce01af93b #v 5.0.0
2222
with:
2323
distribution: "temurin"
2424
java-version: 21

ath.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ set -o xtrace
66
cd "$(dirname "$0")"
77

88
# https://github.com/jenkinsci/acceptance-test-harness/releases
9-
export ATH_VERSION=6578.vcd7330d974d1
9+
export ATH_VERSION=6587.v2a_7493c89346
1010

1111
if [[ $# -eq 0 ]]; then
1212
export JDK=21

cli/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
<plugin>
114114
<groupId>org.apache.maven.plugins</groupId>
115115
<artifactId>maven-shade-plugin</artifactId>
116-
<version>3.6.1</version>
116+
<version>3.6.2</version>
117117
<executions>
118118
<execution>
119119
<goals>

core/src/main/java/hudson/tasks/LogRotator.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,12 @@ public void perform(Job<?, ?> job) throws IOException, InterruptedException {
163163
Run lsb = removeLastBuild ? null : job.getLastSuccessfulBuild();
164164
Run lstb = removeLastBuild ? null : job.getLastStableBuild();
165165

166+
Map<Integer, ? extends Run<?, ?>> runMap = job.getBuildsAsMap();
166167
if (numToKeep != -1) {
167-
job.getBuildsAsMap().entrySet().stream().skip(numToKeep).map(Map.Entry::getValue)
168-
.filter(r -> !shouldKeepRun(r, lsb, lstb)).forEach(r -> {
168+
// Iterate through keySet() instead of entrySet() or values() to avoid triggering lazy loading
169+
// for the first `numToKeep` builds
170+
runMap.keySet().stream().skip(numToKeep).map(runMap::get)
171+
.filter(r -> r != null && !shouldKeepRun(r, lsb, lstb)).forEach(r -> {
169172
LOGGER.log(FINE, "{0} is to be removed", r);
170173
try { r.delete(); }
171174
catch (IOException ex) { exceptionMap.computeIfAbsent(r, key -> new HashSet<>()).add(ex); }
@@ -190,8 +193,10 @@ public void perform(Job<?, ?> job) throws IOException, InterruptedException {
190193
}
191194

192195
if (artifactNumToKeep != null && artifactNumToKeep != -1) {
193-
job.getBuildsAsMap().entrySet().stream().skip(artifactNumToKeep).map(Map.Entry::getValue)
194-
.filter(r -> !shouldKeepRun(r, lsb, lstb)).forEach(r -> {
196+
// Iterate through keySet() instead of entrySet() or values() to avoid triggering lazy loading
197+
// for the first `artifactNumToKeep` builds
198+
runMap.keySet().stream().skip(artifactNumToKeep).map(runMap::get)
199+
.filter(r -> r != null && !shouldKeepRun(r, lsb, lstb)).forEach(r -> {
195200
LOGGER.log(FINE, "{0} is to be purged of artifacts", r);
196201
try { r.deleteArtifacts(); }
197202
catch (IOException ex) { exceptionMap.computeIfAbsent(r, key -> new HashSet<>()).add(ex); }

core/src/main/java/jenkins/model/lazy/BuildReferenceMapAdapter.java

Lines changed: 17 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,20 @@ public boolean remove(Object o) {
169169

170170
@Override
171171
public Iterator<Integer> iterator() {
172-
return new AdaptedIterator<>(BuildReferenceMapAdapter.this.entrySet().iterator()) {
173-
@Override
174-
protected Integer adapt(Map.Entry<Integer, R> e) {
175-
return e.getKey();
176-
}
177-
};
172+
return Iterators.removeNull(Iterators.map(
173+
BuildReferenceMapAdapter.this.core.entrySet().iterator(), coreEntry -> {
174+
BuildReference<R> ref = coreEntry.getValue();
175+
if (!ref.isSet()) {
176+
R r = resolver.resolveBuildRef(ref);
177+
if (r == null) {
178+
return null;
179+
}
180+
}
181+
if (ref.isUnloadable()) {
182+
return null;
183+
}
184+
return ref.number;
185+
}));
178186
}
179187

180188
@Override
@@ -273,19 +281,9 @@ public Iterator<Map.Entry<Integer, R>> iterator() {
273281
private Map.Entry<Integer, R> current;
274282
private final Iterator<Map.Entry<Integer, R>> it = Iterators.removeNull(Iterators.map(
275283
BuildReferenceMapAdapter.this.core.entrySet().iterator(), coreEntry -> {
276-
BuildReference<R> ref = coreEntry.getValue();
277-
if (!ref.isSet()) {
278-
R r = resolver.resolveBuildRef(ref);
279-
// load not loaded or unloadable build
280-
if (r == null) {
281-
return null;
282-
}
283-
return new EntryAdapter(coreEntry, r);
284-
}
285-
if (ref.isUnloadable()) {
286-
return null;
287-
}
288-
return new EntryAdapter(coreEntry);
284+
R r = resolver.resolveBuildRef(coreEntry.getValue());
285+
// if null - load not allowed or build is unloadable
286+
return r == null ? null : new AbstractMap.SimpleImmutableEntry<>(coreEntry.getKey(), r);
289287
}));
290288

291289
@Override
@@ -314,59 +312,6 @@ public Spliterator<Map.Entry<Integer, R>> spliterator() {
314312
}
315313
}
316314

317-
private class EntryAdapter implements Entry<Integer, R> {
318-
private final Map.Entry<Integer, BuildReference<R>> coreEntry;
319-
private volatile R resolvedValue;
320-
321-
EntryAdapter(Map.Entry<Integer, BuildReference<R>> coreEntry) {
322-
this(coreEntry, null);
323-
}
324-
325-
EntryAdapter(Map.Entry<Integer, BuildReference<R>> coreEntry, R resolvedValue) {
326-
this.coreEntry = coreEntry;
327-
this.resolvedValue = resolvedValue;
328-
}
329-
330-
private Map.Entry<Integer, R> getResolvedEntry() {
331-
return new AbstractMap.SimpleEntry<>(getKey(), getValue());
332-
}
333-
334-
@Override
335-
public Integer getKey() {
336-
return coreEntry.getKey();
337-
}
338-
339-
@Override
340-
public R getValue() {
341-
R value = resolvedValue;
342-
if (value != null) {
343-
return value;
344-
}
345-
return resolvedValue = resolver.resolveBuildRef(coreEntry.getValue());
346-
}
347-
348-
@Override
349-
public R setValue(R value) {
350-
// BuildReferenceAdapter is read only
351-
throw new UnsupportedOperationException();
352-
}
353-
354-
@Override
355-
public String toString() {
356-
return getResolvedEntry().toString();
357-
}
358-
359-
@Override
360-
public boolean equals(Object o) {
361-
return (o instanceof Map.Entry<?, ?>) && getResolvedEntry().equals(o);
362-
}
363-
364-
@Override
365-
public int hashCode() {
366-
return getResolvedEntry().hashCode();
367-
}
368-
}
369-
370315
/**
371316
* An interface for resolving build references into actual build instances
372317
* and extracting basic metadata from them.

core/src/main/resources/hudson/model/Computer/_script.jelly

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@ THE SOFTWARE.
2727
-->
2828
<?jelly escape-by-default='true'?>
2929
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form">
30-
<t:scriptConsole>
31-
<pre>println System.getenv("PATH")</pre>
32-
<pre>println "uname -a".execute().text</pre>
33-
<p>
30+
<j:set var="script" value='println System.getenv("PATH")' />
31+
<j:set var="script2" value='println "uname -a".execute().text' />
32+
33+
<t:scriptConsole scripts="${[script, script2]}">
34+
<p class="jenkins-section__description">
3435
${%This execution happens in the agent JVM.}
3536
</p>
3637
</t:scriptConsole>

0 commit comments

Comments
 (0)