Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
2d23b5a
add nx
xiongemi Feb 5, 2025
a7c145c
add nx
xiongemi Feb 5, 2025
aa5c746
chore(repo): apply nx-cloud
lourw May 2, 2025
d998912
chore(repo): remove post install
lourw May 2, 2025
0a6017e
add .env file with NX_BATCH_MODE
xiongemi May 2, 2025
20b8ce6
chore(repo): bust cache
lourw May 5, 2025
cc35f90
chore(repo): switch to staging
lourw May 5, 2025
b731aa4
chore(repo): bust cache
lourw May 5, 2025
071de19
chore(repo): bust cache
lourw May 5, 2025
3651091
upgrade pr version to 0.0.0-pr-30913-b417cd3 (+2 squashed commits)
xiongemi May 5, 2025
9e441cb
chore(repo): change run-many to use assemble, test-ci
lourw May 9, 2025
b34b81c
Use check-ci
lourw May 9, 2025
22a8b56
Apply suggestions from code review
lourw May 10, 2025
e9f719e
upgrade pr version to 0.0.0-pr-30913-75a64ba (+2 squashed commits)
xiongemi May 8, 2025
4cdca45
upgrade pr version to 0.0.0-pr-30913-75a64ba (+2 squashed commits)
xiongemi May 8, 2025
fdd5fcb
change to stream output
xiongemi May 12, 2025
03b5e0f
upgrade pr version to 0.0.0-pr-30913-89a46d1
xiongemi May 12, 2025
7bc1bca
change pr version to 0.0.0-pr-30913-da2b0d3
xiongemi May 13, 2025
c3dd66b
add atomized false for spring-boot-autoconfigure
xiongemi May 13, 2025
cb864e6
add dependsOn
xiongemi May 13, 2025
ef7c44e
add atomized false
xiongemi May 13, 2025
74c4b41
change atomized false for spring-boot-maven-plugin
xiongemi May 13, 2025
2dfe573
bust cache
xiongemi May 13, 2025
c41f5ee
change antoraNpmInstall depends on generateAntoraPlaybook
xiongemi May 13, 2025
75c5d1d
add dependsOn
xiongemi May 13, 2025
18c2b7a
upgrade pr version to .0.0-pr-30913-4005921
xiongemi May 13, 2025
5ea5244
remove all nxProjectReport atomized false
xiongemi May 13, 2025
7001eab
add atomized false to gradle-plugin
xiongemi May 14, 2025
5526a4c
upgrade pr version to 0.0.0-pr-30913-f9ca713`
xiongemi May 14, 2025
7ffbfd1
add dependsOn from test
xiongemi May 14, 2025
e5f464e
upgrade pr version 0.0.0-pr-30913-f38a495
xiongemi May 14, 2025
020d01f
bust cache
xiongemi May 13, 2025
247f3df
disable antora
xiongemi May 14, 2025
c6df43e
disable test for spring-boot and bust cache
xiongemi May 14, 2025
d447871
bust cache
xiongemi May 14, 2025
67ff085
bust cache
xiongemi May 14, 2025
aaec175
bust cache
xiongemi May 14, 2025
1647d9b
upgrade pr version to 0.0.0-pr-30913-8852111
xiongemi May 15, 2025
ee4890d
bust cache
xiongemi May 15, 2025
60b1a7c
add maxParallelForks for spring-boot-maven-plugin
xiongemi May 15, 2025
5336645
add assignment rule
xiongemi May 15, 2025
df78c57
bust cache
xiongemi May 15, 2025
e341317
disable antora in spring-boot-maven-plugin
xiongemi May 16, 2025
8b864a4
bust cache
xiongemi May 16, 2025
1b8ccb8
chore(repo): change parallel to 16
lourw May 27, 2025
6620e68
chore(repo): use parallel 32
lourw May 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
NX_BATCH_MODE=true
NX_VERBOSE_LOGGING=true
NX_TUI=false
CI=true
24 changes: 12 additions & 12 deletions .github/actions/build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ inputs:
java-version:
description: 'Java version to compile and test with'
required: false
default: '17'
default: '21'
publish:
description: 'Whether to publish artifacts ready for deployment to Artifactory'
required: false
Expand Down Expand Up @@ -68,17 +68,17 @@ runs:
COMMERCIAL_REPO_PASSWORD: ${{ inputs.commercial-repository-password }}
COMMERCIAL_REPO_USERNAME: ${{ inputs.commercial-repository-username }}
COMMERCIAL_SNAPSHOT_REPO_URL: ${{ inputs.commercial-snapshot-repository-url }}
run: ./gradlew build
- name: Publish
id: publish
if: ${{ inputs.publish == 'true' }}
shell: bash
env:
COMMERCIAL_RELEASE_REPO_URL: ${{ inputs.commercial-release-repository-url }}
COMMERCIAL_REPO_PASSWORD: ${{ inputs.commercial-repository-password }}
COMMERCIAL_REPO_USERNAME: ${{ inputs.commercial-repository-username }}
COMMERCIAL_SNAPSHOT_REPO_URL: ${{ inputs.commercial-snapshot-repository-url }}
run: ./gradlew -PdeploymentRepository=$(pwd)/deployment-repository ${{ !startsWith(github.event.head_commit.message, 'Next development version') && 'build' || '' }} publishAllPublicationsToDeploymentRepository
run: NX_BATCH_MODE=true NX_CLOUD_DEREFERENCE_SYMLINKS=true NX_VERBOSE_LOGGING=true NX_PERF_LOGGING=true npx nx run-many -t assemble,check-ci --parallel=32 --batch --outputStyle=stream
# - name: Publish
# id: publish
# if: ${{ inputs.publish == 'true' }}
# shell: bash
# env:
# COMMERCIAL_RELEASE_REPO_URL: ${{ inputs.commercial-release-repository-url }}
# COMMERCIAL_REPO_PASSWORD: ${{ inputs.commercial-repository-password }}
# COMMERCIAL_REPO_USERNAME: ${{ inputs.commercial-repository-username }}
# COMMERCIAL_SNAPSHOT_REPO_URL: ${{ inputs.commercial-snapshot-repository-url }}
# run: ./gradlew -PdeploymentRepository=$(pwd)/deployment-repository ${{ !startsWith(github.event.head_commit.message, 'Next development version') && 'build' || '' }} publishAllPublicationsToDeploymentRepository
- name: Read Version From gradle.properties
id: read-version
shell: bash
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/prepare-gradle-build/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ inputs:
java-version:
description: 'Java version to use for the build'
required: false
default: '17'
default: '21'
runs:
using: composite
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/publish-gradle-plugin/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ runs:
uses: actions/setup-java@v4
with:
distribution: 'liberica'
java-version: '17'
java-version: '21
- name: Publish
shell: bash
working-directory: ${{ github.action_path }}
Expand Down
18 changes: 17 additions & 1 deletion .github/workflows/build-pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,30 @@ permissions:
jobs:
build:
name: Build Pull Request
if: ${{ github.repository == 'spring-projects/spring-boot' }}
runs-on: ${{ vars.UBUNTU_MEDIUM || 'ubuntu-latest' }}
steps:
- name: Check Out Code
uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: 22
check-latest: true
cache: npm
- run: npm install

# This enables task distribution via Nx Cloud
# Run this command as early as possible, before dependencies are installed
# Learn more at https://nx.dev/ci/reference/nx-cloud-cli#npx-nxcloud-startcirun
# Uncomment this line to enable task distribution
- run: NX_CLOUD_DEREFERENCE_SYMLINKS=true NX_CLOUD_RETRIEVAL_CONCURRENCY=50 NX_CLOUD_NO_TIMEOUTS=true NX_VERBOSE_LOGGING=true NX_PERF_LOGGING=true npx nx-cloud start-ci-run --require-explicit-completion --distribute-on="../../.nx/workflows/distribution-config.yaml"

- name: Build
id: build
uses: ./.github/actions/build
- name: Stop nx cloud agents
if: always()
run: npx nx-cloud complete-ci-run
- name: Print JVM Thread Dumps When Cancelled
if: cancelled()
uses: ./.github/actions/print-jvm-thread-dumps
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
uses: actions/setup-java@v4
with:
distribution: 'liberica'
java-version: 17
java-version: 21
- name: Set Up Homebrew
if: ${{ !vars.COMMERCIAL }}
uses: Homebrew/actions/setup-homebrew@7657c9512f50e1c35b640971116425935bab3eea
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,7 @@ secrets.yml
.sts4-cache
.git-hooks/
node_modules

.nx/installation
.nx/cache
.nx/workspace-data
116 changes: 116 additions & 0 deletions .nx/nxw.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
"use strict";
// This file should be committed to your repository! It wraps Nx and ensures
// that your local installation matches nx.json.
// See: https://nx.dev/recipes/installation/install-non-javascript for more info.




Object.defineProperty(exports, "__esModule", { value: true });
const fs = require('fs');
const path = require('path');
const cp = require('child_process');
const installationPath = path.join(__dirname, 'installation', 'package.json');
function matchesCurrentNxInstall(currentInstallation, nxJsonInstallation) {
if (!currentInstallation.devDependencies ||
!Object.keys(currentInstallation.devDependencies).length) {
return false;
}
try {
if (currentInstallation.devDependencies['nx'] !==
nxJsonInstallation.version ||
require(path.join(path.dirname(installationPath), 'node_modules', 'nx', 'package.json')).version !== nxJsonInstallation.version) {
return false;
}
for (const [plugin, desiredVersion] of Object.entries(nxJsonInstallation.plugins || {})) {
if (currentInstallation.devDependencies[plugin] !== desiredVersion) {
return false;
}
}
return true;
}
catch {
return false;
}
}
function ensureDir(p) {
if (!fs.existsSync(p)) {
fs.mkdirSync(p, { recursive: true });
}
}
function getCurrentInstallation() {
try {
return require(installationPath);
}
catch {
return {
name: 'nx-installation',
version: '0.0.0',
devDependencies: {},
};
}
}
function performInstallation(currentInstallation, nxJson) {
fs.writeFileSync(installationPath, JSON.stringify({
name: 'nx-installation',
devDependencies: {
nx: nxJson.installation.version,
...nxJson.installation.plugins,
},
}));
try {
cp.execSync('npm i', {
cwd: path.dirname(installationPath),
stdio: 'inherit',
windowsHide: false,
});
}
catch (e) {
// revert possible changes to the current installation
fs.writeFileSync(installationPath, JSON.stringify(currentInstallation));
// rethrow
throw e;
}
}
function ensureUpToDateInstallation() {
const nxJsonPath = path.join(__dirname, '..', 'nx.json');
let nxJson;
try {
nxJson = require(nxJsonPath);
if (!nxJson.installation) {
console.error('[NX]: The "installation" entry in the "nx.json" file is required when running the nx wrapper. See https://nx.dev/recipes/installation/install-non-javascript');
process.exit(1);
}
}
catch {
console.error('[NX]: The "nx.json" file is required when running the nx wrapper. See https://nx.dev/recipes/installation/install-non-javascript');
process.exit(1);
}
try {
ensureDir(path.join(__dirname, 'installation'));
const currentInstallation = getCurrentInstallation();
if (!matchesCurrentNxInstall(currentInstallation, nxJson.installation)) {
performInstallation(currentInstallation, nxJson);
}
}
catch (e) {
const messageLines = [
'[NX]: Nx wrapper failed to synchronize installation.',
];
if (e instanceof Error) {
messageLines.push('');
messageLines.push(e.message);
messageLines.push(e.stack);
}
else {
messageLines.push(e.toString());
}
console.error(messageLines.join('\n'));
process.exit(1);
}
}
if (!process.env.NX_WRAPPER_SKIP_INSTALL) {
ensureUpToDateInstallation();
}

require('./installation/node_modules/nx/bin/nx');
39 changes: 39 additions & 0 deletions .nx/workflows/agents.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
launch-templates:
linux-extra-large-plus-jvm:
env:
DOCKER_HOST: ""
SERVICES_HOST: ""
LANG: C.UTF-8
resource-class: 'docker_linux_amd64/extra_large+'
image: 'ubuntu22.04-node20.11-v10'
init-steps:
- name: java version
script: java -version

- name: Checkout
uses: 'nrwl/nx-cloud-workflows/v3.6/workflow-steps/checkout/main.yaml'

- name: Setup Java 21
script: |
sudo apt update
sudo apt install -y openjdk-21-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-21-openjdk-amd64/bin/java
java -version
- name: Setup gradle
script: ./gradlew wrapper && ./gradlew --stop && ./gradlew clean

- name: Restore Node Modules Cache
uses: 'nrwl/nx-cloud-workflows/v4/workflow-steps/cache/main.yaml'
inputs:
key: 'package-lock.json|yarn.lock|pnpm-lock.yaml'
paths: 'node_modules'
base-branch: 'main'
- name: Restore Browser Binary Cache
uses: 'nrwl/nx-cloud-workflows/v4/workflow-steps/cache/main.yaml'
inputs:
key: 'package-lock.json|yarn.lock|pnpm-lock.yaml|"browsers"'
paths: |
'../.cache/Cypress'
base-branch: 'main'
- name: Install Node Modules
uses: 'nrwl/nx-cloud-workflows/v4/workflow-steps/install-node-modules/main.yaml'
9 changes: 9 additions & 0 deletions .nx/workflows/distribution-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
distribute-on:
default: 5 linux-extra-large-plus-jvm

assignment-rules:
- targets:
- 'ciIntTest*'
run-on:
- agent: linux-extra-large-plus-jvm
parallelism: 1
17 changes: 17 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
plugins {
id "dev.nx.gradle.project-graph" version "0.0.1-alpha.4"
id "base"
id "org.jetbrains.kotlin.jvm" apply false // https://youtrack.jetbrains.com/issue/KT-30276
}
Expand All @@ -9,12 +10,17 @@ defaultTasks 'build'

allprojects {
group = "org.springframework.boot"
apply {
plugin("project-report")
plugin("dev.nx.gradle.project-graph")
}
}

subprojects {
apply plugin: "org.springframework.boot.conventions"

repositories {
mavenLocal()
mavenCentral()
spring.mavenRepositories()
}
Expand All @@ -24,3 +30,14 @@ subprojects {
}
}

tasks.register("projectReportAll") {
// All project reports of subprojects
allprojects.forEach {
dependsOn(it.tasks.getAt("projectReport"))
}

// All projectReportAll of included builds
gradle.includedBuilds.forEach {
dependsOn(it.task(":projectReportAll"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.Copy;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.TaskProvider;

Expand Down Expand Up @@ -90,7 +91,8 @@ private void apply(Project project, AntoraPlugin antoraPlugin) {
TaskProvider<Copy> copyAntoraPackageJsonTask = tasks.register("copyAntoraPackageJson", Copy.class,
(task) -> configureCopyAntoraPackageJsonTask(project, task));
TaskProvider<NpmInstallTask> npmInstallTask = tasks.register("antoraNpmInstall", NpmInstallTask.class,
(task) -> configureNpmInstallTask(project, task, copyAntoraPackageJsonTask));
(task) -> configureNpmInstallTask(project, task, copyAntoraPackageJsonTask,
generateAntoraPlaybookTask));
tasks.withType(GenerateAntoraYmlTask.class,
(generateAntoraYmlTask) -> configureGenerateAntoraYmlTask(project, generateAntoraYmlTask, resolvedBom));
tasks.withType(AntoraTask.class,
Expand All @@ -114,13 +116,24 @@ private void configureCopyAntoraPackageJsonTask(Project project, Copy copyAntora
}

private void configureNpmInstallTask(Project project, NpmInstallTask npmInstallTask,
TaskProvider<Copy> copyAntoraPackageJson) {
TaskProvider<Copy> copyAntoraPackageJson, TaskProvider<GenerateAntoraPlaybook> generateAntoraPlaybookTask) {
npmInstallTask.dependsOn(copyAntoraPackageJson);
npmInstallTask.dependsOn(generateAntoraPlaybookTask);
Map<String, String> environment = new HashMap<>();
environment.put("npm_config_omit", "optional");
environment.put("npm_config_update_notifier", "false");
npmInstallTask.getEnvironment().set(environment);
npmInstallTask.getNpmCommand().set(List.of("ci", "--silent", "--no-progress"));

npmInstallTask.getInputs()
.files(project.getLayout().getBuildDirectory().dir(".gradle/nodejs"))
.withPropertyName("antoraNodeJs")
.withPathSensitivity(PathSensitivity.RELATIVE);

npmInstallTask.getInputs()
.files(getNodeProjectDir(project))
.withPropertyName("antoraNodeProjectDir")
.withPathSensitivity(PathSensitivity.RELATIVE);
}

private void configureGenerateAntoraYmlTask(Project project, GenerateAntoraYmlTask generateAntoraYmlTask,
Expand Down Expand Up @@ -163,6 +176,22 @@ private void configureAntoraTask(Project project, AntoraTask antoraTask,
TaskProvider<GenerateAntoraPlaybook> generateAntoraPlaybookTask) {
antoraTask.setGroup("Documentation");
antoraTask.dependsOn(npmInstallTask, generateAntoraPlaybookTask);

antoraTask.getInputs()
.file(generateAntoraPlaybookTask.flatMap(GenerateAntoraPlaybook::getOutputFile))
.withPropertyName("antoraPlaybookFile")
.withPathSensitivity(PathSensitivity.RELATIVE);

antoraTask.getInputs()
.files(project.getLayout().getBuildDirectory().dir(".gradle/nodejs"))
.withPropertyName("antoraNodeJs")
.withPathSensitivity(PathSensitivity.RELATIVE);

antoraTask.getInputs()
.files(getNodeProjectDir(project))
.withPropertyName("antoraNodeProjectDir")
.withPathSensitivity(PathSensitivity.RELATIVE);

antoraTask.setPlaybook("antora-playbook.yml");
antoraTask.setUiBundleUrl(getUiBundleUrl(project));
antoraTask.getArgs().set(project.provider(() -> getAntoraNpxArs(project, antoraTask)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ public void apply(Project project) {
}

private void setUpProjectRepository(Project project, Task publishTask, File repositoryLocation) {
publishTask.getOutputs().dir(repositoryLocation);
publishTask.doFirst(new CleanAction(repositoryLocation));
Configuration projectRepository = project.getConfigurations().create(MAVEN_REPOSITORY_CONFIGURATION_NAME);
project.getArtifacts()
Expand Down
Loading
Loading