Merge branch '3.1.x' into 3.2.x

Closes gh-40568
This commit is contained in:
Andy Wilkinson 2024-04-29 12:06:20 +01:00
commit f70a270ec8
43 changed files with 4 additions and 1552 deletions

View File

@ -1,18 +0,0 @@
== Concourse pipeline
Ensure that you've setup the spring-boot target and can login
[source]
----
$ fly -t spring-boot login -n spring-boot -c https://ci.spring.io
----
The pipeline can be deployed using the following command:
[source]
----
$ fly -t spring-boot set-pipeline -p spring-boot-3.2.x -c ci/pipeline.yml -l ci/parameters.yml
----
NOTE: This assumes that you have credhub integration configured with the appropriate
secrets.

View File

@ -1,23 +0,0 @@
changelog:
repository: spring-projects/spring-boot
sections:
- title: ":star: New Features"
labels:
- "type: enhancement"
- title: ":lady_beetle: Bug Fixes"
labels:
- "type: bug"
- "type: regression"
- title: ":notebook_with_decorative_cover: Documentation"
labels:
- "type: documentation"
- title: ":hammer: Dependency Upgrades"
sort: "title"
labels:
- "type: dependency-upgrade"
issues:
ports:
- label: "status: forward-port"
bodyExpression: 'Forward port of issue #(\d+).*'
- label: "status: back-port"
bodyExpression: 'Back port of issue #(\d+).*'

View File

@ -1,13 +0,0 @@
plugins {
id "com.gradle.plugin-publish" version "0.15.0"
}
tasks.register("publishExisting", com.gradle.publish.PublishExistingTask) {
pluginId = "org.springframework.boot"
fileRepositoryRoot = new File("${repositoryRoot}")
pluginVersion = "${bootVersion}"
pluginCoordinates = "org.springframework.boot:spring-boot-gradle-plugin:${bootVersion}"
displayName = "Spring Boot Gradle Plugin"
pluginDescription = "Spring Boot Gradle Plugin"
website = "https://spring.io/projects/spring-boot"
vcsUrl = "https://github.com/spring-projects/spring-boot"
}

View File

@ -1,11 +0,0 @@
spring:
main:
banner-mode: off
sonatype:
exclude:
- "build-info.json"
- "org/springframework/boot/spring-boot-docs/.*"
sdkman:
artifact: "org.springframework.boot:spring-boot-cli:*:zip:bin"
broadcast-url: "https://github.com/spring-projects/spring-boot/releases/v%s"
candidate: "springboot"

View File

@ -1,21 +0,0 @@
== CI Images
These images are used by CI to run the actual builds.
To build the image locally run the following from this directory:
----
$ docker build --no-cache -f <image-folder>/Dockerfile .
----
For example
----
$ docker build --no-cache -f ci-image/Dockerfile .
----
To test run:
----
$ docker run -it --entrypoint /bin/bash <SHA>
----

View File

@ -1,15 +0,0 @@
ARG DOCKER_PROXY_CACHE=
FROM ${DOCKER_PROXY_CACHE}ubuntu:jammy-20240405
ADD setup.sh /setup.sh
ADD get-jdk-url.sh /get-jdk-url.sh
ADD get-docker-url.sh /get-docker-url.sh
ADD get-docker-compose-url.sh /get-docker-compose-url.sh
RUN ./setup.sh java17 java21
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV JAVA_HOME /opt/openjdk
ENV PATH $JAVA_HOME/bin:$PATH
ADD docker-lib.sh /docker-lib.sh

View File

@ -1,15 +0,0 @@
ARG DOCKER_PROXY_CACHE=
FROM ${DOCKER_PROXY_CACHE}ubuntu:jammy-20240405
ADD setup.sh /setup.sh
ADD get-jdk-url.sh /get-jdk-url.sh
ADD get-docker-url.sh /get-docker-url.sh
ADD get-docker-compose-url.sh /get-docker-compose-url.sh
RUN ./setup.sh java17
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV JAVA_HOME /opt/openjdk
ENV PATH $JAVA_HOME/bin:$PATH
ADD docker-lib.sh /docker-lib.sh

View File

@ -1,97 +0,0 @@
# Based on: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh
DOCKER_LOG_FILE=${DOCKER_LOG_FILE:-/tmp/docker.log}
SKIP_PRIVILEGED=${SKIP_PRIVILEGED:-false}
STARTUP_TIMEOUT=${STARTUP_TIMEOUT:-120}
sanitize_cgroups() {
mkdir -p /sys/fs/cgroup
mountpoint -q /sys/fs/cgroup || \
mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
mount -o remount,rw /sys/fs/cgroup
sed -e 1d /proc/cgroups | while read sys hierarchy num enabled; do
if [ "$enabled" != "1" ]; then
# subsystem disabled; skip
continue
fi
grouping="$(cat /proc/self/cgroup | cut -d: -f2 | grep "\\<$sys\\>")" || true
if [ -z "$grouping" ]; then
# subsystem not mounted anywhere; mount it on its own
grouping="$sys"
fi
mountpoint="/sys/fs/cgroup/$grouping"
mkdir -p "$mountpoint"
# clear out existing mount to make sure new one is read-write
if mountpoint -q "$mountpoint"; then
umount "$mountpoint"
fi
mount -n -t cgroup -o "$grouping" cgroup "$mountpoint"
if [ "$grouping" != "$sys" ]; then
if [ -L "/sys/fs/cgroup/$sys" ]; then
rm "/sys/fs/cgroup/$sys"
fi
ln -s "$mountpoint" "/sys/fs/cgroup/$sys"
fi
done
if ! test -e /sys/fs/cgroup/systemd ; then
mkdir /sys/fs/cgroup/systemd
mount -t cgroup -o none,name=systemd none /sys/fs/cgroup/systemd
fi
}
start_docker() {
mkdir -p /var/log
mkdir -p /var/run
if [ "$SKIP_PRIVILEGED" = "false" ]; then
sanitize_cgroups
# check for /proc/sys being mounted readonly, as systemd does
if grep '/proc/sys\s\+\w\+\s\+ro,' /proc/mounts >/dev/null; then
mount -o remount,rw /proc/sys
fi
fi
local mtu=$(cat /sys/class/net/$(ip route get 8.8.8.8|awk '{ print $5 }')/mtu)
local server_args="--mtu ${mtu}"
local registry=""
server_args="${server_args}"
if [ -n "$1" ]; then
server_args="${server_args} --registry-mirror https://$1"
fi
try_start() {
dockerd --data-root /scratch/docker ${server_args} >$DOCKER_LOG_FILE 2>&1 &
echo $! > /tmp/docker.pid
sleep 1
echo waiting for docker to come up...
until docker info >/dev/null 2>&1; do
sleep 1
if ! kill -0 "$(cat /tmp/docker.pid)" 2>/dev/null; then
return 1
fi
done
}
export server_args DOCKER_LOG_FILE
declare -fx try_start
if ! timeout ${STARTUP_TIMEOUT} bash -ce 'while true; do try_start && break; done'; then
echo Docker failed to start within ${STARTUP_TIMEOUT} seconds.
return 1
fi
}

View File

@ -1,5 +0,0 @@
#!/bin/bash
set -e
version="2.17.0"
echo "https://github.com/docker/compose/releases/download/v$version/docker-compose-linux-x86_64"

View File

@ -1,5 +0,0 @@
#!/bin/bash
set -e
version="26.1.0"
echo "https://download.docker.com/linux/static/stable/x86_64/docker-$version.tgz";

View File

@ -1,14 +0,0 @@
#!/bin/bash
set -e
case "$1" in
java17)
echo "https://github.com/bell-sw/Liberica/releases/download/17.0.11+10/bellsoft-jdk17.0.11+10-linux-amd64.tar.gz"
;;
java21)
echo "https://github.com/bell-sw/Liberica/releases/download/21.0.3+10/bellsoft-jdk21.0.3+10-linux-amd64.tar.gz"
;;
*)
echo $"Unknown java version"
exit 1
esac

View File

@ -1,64 +0,0 @@
#!/bin/bash
set -ex
###########################################################
# OS and UTILS
###########################################################
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install --no-install-recommends -y locales tzdata ca-certificates net-tools libxml2-utils git curl libudev1 libxml2-utils iptables iproute2 jq
locale-gen en_US.utf8
ln -fs /usr/share/zoneinfo/UTC /etc/localtime
dpkg-reconfigure --frontend noninteractive tzdata
rm -rf /var/lib/apt/lists/*
curl https://raw.githubusercontent.com/spring-io/concourse-java-scripts/v0.0.4/concourse-java.sh > /opt/concourse-java.sh
###########################################################
# JAVA
###########################################################
JDK_URL=$( ./get-jdk-url.sh $1 )
mkdir -p /opt/openjdk
cd /opt/openjdk
curl -L ${JDK_URL} | tar zx --strip-components=1
test -f /opt/openjdk/bin/java
test -f /opt/openjdk/bin/javac
if [[ $# -eq 2 ]]; then
cd /
TOOLCHAIN_JDK_URL=$( ./get-jdk-url.sh $2 )
mkdir -p /opt/openjdk-toolchain
cd /opt/openjdk-toolchain
curl -L ${TOOLCHAIN_JDK_URL} | tar zx --strip-components=1
test -f /opt/openjdk-toolchain/bin/java
test -f /opt/openjdk-toolchain/bin/javac
fi
###########################################################
# DOCKER
###########################################################
cd /
DOCKER_URL=$( ./get-docker-url.sh )
curl -L ${DOCKER_URL} | tar zx
mv /docker/* /bin/
chmod +x /bin/docker*
export ENTRYKIT_VERSION=0.4.0
curl -L https://github.com/progrium/entrykit/releases/download/v${ENTRYKIT_VERSION}/entrykit_${ENTRYKIT_VERSION}_Linux_x86_64.tgz | tar zx
chmod +x entrykit && \
mv entrykit /bin/entrykit && \
entrykit --symlink
###########################################################
# DOCKER COMPOSE
###########################################################
mkdir -p /usr/local/lib/docker/cli-plugins
DOCKER_COMPOSE_URL=$( ./get-docker-compose-url.sh )
curl -L ${DOCKER_COMPOSE_URL} -o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

View File

@ -1,16 +0,0 @@
github-organization-name: "spring-projects"
github-repository-name: "spring-boot"
github-repository-uri: "https://github.com/spring-projects/spring-boot.git"
homebrew-tap-repo: "https://github.com/spring-io/homebrew-tap.git"
docker-hub-organization: "springci"
docker-hub-repository-prefix: "spring-boot"
artifactory-snapshot-repository: "libs-snapshot-local"
artifactory-staging-repository: "libs-staging-local"
artifactory-url: "https://repo.spring.io"
branch: "3.2.x"
milestone: "3.2.x"
build-name: "spring-boot"
concourse-url: "https://ci.spring.io"
task-timeout: 2h00m
final-release: false
dockerhub-proxy-cache: harbor-repo.vmware.com/dockerhub-proxy-cache/

View File

@ -1,678 +0,0 @@
anchors:
git-repo-resource-source: &git-repo-resource-source
uri: ((github-repository-uri))
username: ((github-username))
password: ((github-ci-release-token))
branch: ((branch))
registry-image-resource-source: &registry-image-resource-source
username: ((docker-hub-username))
password: ((docker-hub-password))
ci-registry-image-resource-source: &ci-registry-image-resource-source
username: ((harbor-registry-username))
password: ((harbor-registry-password))
tag: ((milestone))
gradle-enterprise-task-params: &gradle-enterprise-task-params
GRADLE_ENTERPRISE_ACCESS_KEY: ((gradle_enterprise_secret_access_key))
GRADLE_ENTERPRISE_CACHE_URL: ((gradle_enterprise_cache_url))
GRADLE_ENTERPRISE_CACHE_USERNAME: ((gradle_enterprise_cache_user.username))
GRADLE_ENTERPRISE_CACHE_PASSWORD: ((gradle_enterprise_cache_user.password))
docker-hub-task-params: &docker-hub-task-params
DOCKER_HUB_MIRROR: ((docker-hub-mirror))
DOCKER_HUB_USERNAME: ((docker-hub-username))
DOCKER_HUB_PASSWORD: ((docker-hub-password))
DOCKER_HUB_AUTH: ((docker-hub-auth))
github-task-params: &github-task-params
GITHUB_REPO: ((github-repository-name))
GITHUB_ORGANIZATION: ((github-organization-name))
GITHUB_PASSWORD: ((github-ci-release-token))
GITHUB_USERNAME: ((github-username))
MILESTONE: ((milestone))
sontatype-task-params: &sonatype-task-params
SONATYPE_USERNAME: ((sonatype-username))
SONATYPE_PASSWORD: ((sonatype-password))
SONATYPE_URL: ((sonatype-url))
SONATYPE_STAGING_PROFILE_ID: ((sonatype-staging-profile-id))
artifactory-task-params: &artifactory-task-params
ARTIFACTORY_URL: ((artifactory-url))
ARTIFACTORY_USERNAME: ((artifactory-username))
ARTIFACTORY_PASSWORD: ((artifactory-password))
sdkman-task-params: &sdkman-task-params
SDKMAN_CONSUMER_KEY: ((sdkman-consumer-key))
SDKMAN_CONSUMER_TOKEN: ((sdkman-consumer-token))
build-project-task-params: &build-project-task-params
privileged: true
timeout: ((task-timeout))
file: git-repo/ci/tasks/build-project.yml
params:
BRANCH: ((branch))
<<: *gradle-enterprise-task-params
<<: *docker-hub-task-params
run-system-tests-task-params: &run-system-tests-task-params
privileged: true
timeout: ((task-timeout))
file: git-repo/ci/tasks/run-system-tests.yml
params:
BRANCH: ((branch))
<<: *gradle-enterprise-task-params
<<: *docker-hub-task-params
artifactory-repo-put-params: &artifactory-repo-put-params
signing_key: ((signing-key))
signing_passphrase: ((signing-passphrase))
repo: ((artifactory-snapshot-repository))
folder: distribution-repository
build_uri: "https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}"
build_number: "${BUILD_JOB_NAME}-${BUILD_NAME}"
disable_checksum_uploads: true
threads: 8
artifact_set:
- include:
- "/**/spring-boot-docs-*.zip"
properties:
"zip.type": "docs"
"zip.deployed": "false"
slack-fail-params: &slack-fail-params
text: >
:concourse-failed: <!here> <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} failed!>
[$TEXT_FILE_CONTENT]
text_file: git-repo/build/build-scan-uri.txt
silent: true
icon_emoji: ":concourse:"
username: concourse-ci
slack-success-params: &slack-success-params
text: >
:concourse-succeeded: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} was successful!>
[$TEXT_FILE_CONTENT]
text_file: git-repo/build/build-scan-uri.txt
silent: true
icon_emoji: ":concourse:"
username: concourse-ci
homebrew-tap-repo-resource-source: &homebrew-tap-repo-resource-source
uri: ((homebrew-tap-repo))
username: ((github-username))
password: ((github-ci-release-token))
branch: main
gradle-publish-params: &gradle-publish-params
GRADLE_PUBLISH_KEY: ((gradle-publish-key))
GRADLE_PUBLISH_SECRET: ((gradle-publish-secret))
resource_types:
- name: registry-image
type: registry-image
source:
<<: *registry-image-resource-source
repository: ((dockerhub-proxy-cache))concourse/registry-image-resource
tag: 1.9.0
- name: artifactory-resource
type: registry-image
source:
<<: *registry-image-resource-source
repository: ((dockerhub-proxy-cache))springio/artifactory-resource
tag: 0.0.18
- name: github-status-resource
type: registry-image
source:
<<: *registry-image-resource-source
repository: ((dockerhub-proxy-cache))dpb587/github-status-resource
tag: master
- name: slack-notification
type: registry-image
source:
<<: *registry-image-resource-source
repository: ((dockerhub-proxy-cache))cfcommunity/slack-notification-resource
tag: latest
- name: github-release
type: registry-image
source:
<<: *registry-image-resource-source
repository: ((dockerhub-proxy-cache))concourse/github-release-resource
tag: 1.8.0
resources:
- name: git-repo
type: git
icon: github
source:
<<: *git-repo-resource-source
- name: git-repo-windows
type: git
icon: github
source:
<<: *git-repo-resource-source
git_config:
- name: core.autocrlf
value: true
- name: github-pre-release
type: github-release
icon: briefcase-download-outline
source:
owner: ((github-organization-name))
repository: ((github-repository-name))
access_token: ((github-ci-release-token))
pre_release: true
release: false
- name: github-release
type: github-release
icon: briefcase-download
source:
owner: ((github-organization-name))
repository: ((github-repository-name))
access_token: ((github-ci-release-token))
pre_release: false
- name: ci-images-git-repo
type: git
icon: github
source:
uri: ((github-repository-uri))
branch: ((branch))
paths: ["ci/images/*"]
- name: ci-image
type: registry-image
icon: docker
source:
<<: *ci-registry-image-resource-source
repository: projects.registry.vmware.com/spring-oss-ci/spring-boot-ci
- name: ci-image-jdk21
type: registry-image
icon: docker
source:
<<: *ci-registry-image-resource-source
repository: projects.registry.vmware.com/spring-oss-ci/spring-boot-ci-jdk21
- name: paketo-builder-base-image
type: registry-image
icon: docker
source:
repository: ((dockerhub-proxy-cache))paketobuildpacks/builder-jammy-base
tag: latest
- name: artifactory-repo
type: artifactory-resource
icon: package-variant
source:
uri: ((artifactory-url))
username: ((artifactory-username))
password: ((artifactory-password))
build_name: ((build-name))
build_number_prefix: "${BUILD_PIPELINE_NAME}-"
check_limit: 500
- name: repo-status-build
type: github-status-resource
icon: eye-check-outline
source:
repository: ((github-organization-name))/((github-repository-name))
access_token: ((github-ci-status-token))
branch: ((branch))
context: build
- name: repo-status-jdk21-build
type: github-status-resource
icon: eye-check-outline
source:
repository: ((github-organization-name))/((github-repository-name))
access_token: ((github-ci-status-token))
branch: ((branch))
context: jdk21-build
- name: slack-alert
type: slack-notification
icon: slack
source:
url: ((slack-webhook-url))
- name: every-wednesday
type: time
icon: clock-outline
source:
start: 8:00 PM
stop: 9:00 PM
days: [Wednesday]
- name: daily
type: time
icon: clock-outline
source: { interval: "24h" }
- name: homebrew-tap-repo
type: git
icon: github
source:
<<: *homebrew-tap-repo-resource-source
jobs:
- name: build-ci-images
plan:
- get: ci-images-git-repo
trigger: true
- get: git-repo
- in_parallel:
- task: build-ci-image
privileged: true
file: git-repo/ci/tasks/build-ci-image.yml
output_mapping:
image: ci-image
vars:
ci-image-name: ci-image
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
- task: build-ci-image-jdk21
privileged: true
file: git-repo/ci/tasks/build-ci-image.yml
output_mapping:
image: ci-image-jdk21
vars:
ci-image-name: ci-image-jdk21
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
- in_parallel:
- put: ci-image
params:
image: ci-image/image.tar
- put: ci-image-jdk21
params:
image: ci-image-jdk21/image.tar
- name: detect-jdk-updates
plan:
- get: git-repo
- get: every-wednesday
trigger: true
- get: ci-image
- in_parallel:
- task: detect-jdk17-update
image: ci-image
file: git-repo/ci/tasks/detect-jdk-updates.yml
params:
<<: *github-task-params
JDK_VERSION: java17
- task: detect-jdk21-update
image: ci-image
file: git-repo/ci/tasks/detect-jdk-updates.yml
params:
<<: *github-task-params
JDK_VERSION: java21
- name: detect-ubuntu-image-updates
plan:
- get: git-repo
- get: every-wednesday
trigger: true
- get: ci-image
- do:
- task: detect-ubuntu-image-updates
image: ci-image
file: git-repo/ci/tasks/detect-ubuntu-image-updates.yml
params:
<<: *github-task-params
- name: detect-docker-updates
plan:
- get: git-repo
- get: every-wednesday
trigger: true
- get: ci-image
- do:
- task: detect-docker-updates
image: ci-image
file: git-repo/ci/tasks/detect-docker-updates.yml
params:
<<: *github-task-params
- name: build
serial: true
public: true
plan:
- get: ci-image
- get: git-repo
trigger: true
- put: repo-status-build
params: { state: "pending", commit: "git-repo" }
- do:
- task: build-project
image: ci-image
<<: *build-project-task-params
on_failure:
do:
- put: repo-status-build
params: { state: "failure", commit: "git-repo" }
- put: slack-alert
params:
<<: *slack-fail-params
- put: repo-status-build
params: { state: "success", commit: "git-repo" }
- put: slack-alert
params:
<<: *slack-success-params
- name: jdk21-build
serial: true
public: true
plan:
- get: ci-image-jdk21
- get: git-repo
trigger: true
- put: repo-status-jdk21-build
params: { state: "pending", commit: "git-repo" }
- do:
- task: build-project
image: ci-image-jdk21
privileged: true
timeout: ((task-timeout))
file: git-repo/ci/tasks/build-project.yml
params:
BRANCH: ((branch))
TOOLCHAIN_JAVA_VERSION: 21
<<: *gradle-enterprise-task-params
<<: *docker-hub-task-params
on_failure:
do:
- put: repo-status-jdk21-build
params: { state: "failure", commit: "git-repo" }
- put: slack-alert
params:
<<: *slack-fail-params
- put: repo-status-jdk21-build
params: { state: "success", commit: "git-repo" }
- put: slack-alert
params:
<<: *slack-success-params
- name: windows-build
serial: true
plan:
- get: git-repo
resource: git-repo-windows
- get: daily
trigger: true
- do:
- task: build-project
privileged: true
file: git-repo/ci/tasks/build-project-windows.yml
tags:
- WIN64
timeout: ((task-timeout))
params:
BRANCH: ((branch))
<<: *gradle-enterprise-task-params
on_failure:
do:
- put: slack-alert
params:
<<: *slack-fail-params
- put: slack-alert
params:
<<: *slack-success-params
- name: stage-milestone
serial: true
plan:
- get: ci-image
- get: git-repo
trigger: false
- task: stage
image: ci-image
timeout: ((task-timeout))
file: git-repo/ci/tasks/stage.yml
params:
FINAL_RELEASE: ((final-release))
RELEASE_TYPE: M
<<: *gradle-enterprise-task-params
<<: *docker-hub-task-params
- put: artifactory-repo
params:
<<: *artifactory-repo-put-params
repo: ((artifactory-staging-repository))
get_params:
threads: 8
- put: git-repo
params:
repository: stage-git-repo
- name: stage-rc
serial: true
plan:
- get: ci-image
- get: git-repo
trigger: false
- task: stage
image: ci-image
timeout: ((task-timeout))
file: git-repo/ci/tasks/stage.yml
params:
FINAL_RELEASE: ((final-release))
RELEASE_TYPE: RC
<<: *gradle-enterprise-task-params
<<: *docker-hub-task-params
- put: artifactory-repo
params:
<<: *artifactory-repo-put-params
repo: ((artifactory-staging-repository))
get_params:
threads: 8
- put: git-repo
params:
repository: stage-git-repo
- name: stage-release
serial: true
plan:
- get: ci-image
- get: git-repo
trigger: false
- task: stage
image: ci-image
timeout: ((task-timeout))
file: git-repo/ci/tasks/stage.yml
params:
FINAL_RELEASE: ((final-release))
RELEASE_TYPE: RELEASE
<<: *gradle-enterprise-task-params
<<: *docker-hub-task-params
- put: artifactory-repo
params:
<<: *artifactory-repo-put-params
repo: ((artifactory-staging-repository))
get_params:
threads: 8
- put: git-repo
params:
repository: stage-git-repo
- name: promote-milestone
serial: true
plan:
- get: git-repo
trigger: false
- get: artifactory-repo
trigger: false
passed: [stage-milestone]
params:
download_artifacts: false
save_build_info: true
- task: promote
file: git-repo/ci/tasks/promote.yml
vars:
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
params:
RELEASE_TYPE: M
<<: *artifactory-task-params
- task: generate-changelog
file: git-repo/ci/tasks/generate-changelog.yml
vars:
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
params:
RELEASE_TYPE: M
GITHUB_USERNAME: ((github-username))
GITHUB_TOKEN: ((github-ci-release-token))
- put: github-pre-release
params:
name: generated-changelog/tag
tag: generated-changelog/tag
body: generated-changelog/changelog.md
- name: promote-rc
serial: true
plan:
- get: git-repo
trigger: false
- get: artifactory-repo
trigger: false
passed: [stage-rc]
params:
download_artifacts: false
save_build_info: true
- task: promote
file: git-repo/ci/tasks/promote.yml
vars:
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
params:
RELEASE_TYPE: RC
<<: *artifactory-task-params
- task: generate-changelog
file: git-repo/ci/tasks/generate-changelog.yml
vars:
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
params:
RELEASE_TYPE: RC
GITHUB_USERNAME: ((github-username))
GITHUB_TOKEN: ((github-ci-release-token))
- put: github-pre-release
params:
name: generated-changelog/tag
tag: generated-changelog/tag
body: generated-changelog/changelog.md
- name: promote-release
serial: true
plan:
- get: git-repo
trigger: false
- get: artifactory-repo
trigger: false
passed: [stage-release]
params:
download_artifacts: true
save_build_info: true
threads: 8
- task: promote
file: git-repo/ci/tasks/promote.yml
vars:
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
params:
RELEASE_TYPE: RELEASE
<<: *artifactory-task-params
<<: *sonatype-task-params
- name: publish-gradle-plugin
serial: true
plan:
- get: ci-image
- get: git-repo
- get: artifactory-repo
trigger: true
passed: [promote-release]
params:
download_artifacts: true
save_build_info: true
threads: 8
- task: publish-gradle-plugin
image: ci-image
file: git-repo/ci/tasks/publish-gradle-plugin.yml
params:
<<: *gradle-publish-params
- name: create-github-release
serial: true
plan:
- get: ci-image
- get: git-repo
- get: artifactory-repo
trigger: true
passed: [promote-release]
params:
download_artifacts: false
save_build_info: true
- task: generate-changelog
file: git-repo/ci/tasks/generate-changelog.yml
vars:
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
params:
RELEASE_TYPE: RELEASE
GITHUB_USERNAME: ((github-username))
GITHUB_TOKEN: ((github-ci-release-token))
- put: github-release
params:
name: generated-changelog/tag
tag: generated-changelog/tag
body: generated-changelog/changelog.md
- name: publish-to-sdkman
serial: true
plan:
- get: git-repo
- get: artifactory-repo
passed: [create-github-release]
params:
download_artifacts: false
save_build_info: true
- task: publish-to-sdkman
file: git-repo/ci/tasks/publish-to-sdkman.yml
vars:
dockerhub-proxy-cache: ((dockerhub-proxy-cache))
params:
<<: *sdkman-task-params
RELEASE_TYPE: RELEASE
BRANCH: ((branch))
LATEST_GA: true
- name: update-homebrew-tap
serial: true
plan:
- get: ci-image
- get: git-repo
- get: homebrew-tap-repo
- get: artifactory-repo
passed: [create-github-release]
params:
download_artifacts: false
save_build_info: true
- task: update-homebrew-tap
image: ci-image
file: git-repo/ci/tasks/update-homebrew-tap.yml
params:
LATEST_GA: true
- put: homebrew-tap-repo
params:
repository: updated-homebrew-tap-repo
- name: run-system-tests
serial: true
public: true
plan:
- get: ci-image
- get: git-repo
- get: paketo-builder-base-image
trigger: true
- get: daily
trigger: true
- do:
- task: run-system-tests
image: ci-image
<<: *run-system-tests-task-params
on_failure:
do:
- put: slack-alert
params:
<<: *slack-fail-params
- put: slack-alert
params:
<<: *slack-success-params
- name: jdk21-run-system-tests
serial: true
public: true
plan:
- get: ci-image-jdk21
- get: git-repo
- get: paketo-builder-base-image
trigger: true
- get: daily
trigger: true
- do:
- task: run-system-tests
image: ci-image-jdk21
privileged: true
timeout: ((task-timeout))
file: git-repo/ci/tasks/run-system-tests.yml
params:
BRANCH: ((branch))
TOOLCHAIN_JAVA_VERSION: 21
<<: *gradle-enterprise-task-params
<<: *docker-hub-task-params
on_failure:
do:
- put: slack-alert
params:
<<: *slack-fail-params
- put: slack-alert
params:
<<: *slack-success-params
groups:
- name: "builds"
jobs: ["build", "jdk21-build", "windows-build"]
- name: "releases"
jobs: ["stage-milestone", "stage-rc", "stage-release", "promote-milestone", "promote-rc", "promote-release", "create-github-release", "publish-gradle-plugin", "publish-to-sdkman", "update-homebrew-tap"]
- name: "system-tests"
jobs: ["run-system-tests", "jdk21-run-system-tests"]
- name: "ci-images"
jobs: ["build-ci-images", "detect-docker-updates", "detect-jdk-updates", "detect-ubuntu-image-updates"]

View File

@ -1,4 +0,0 @@
SET "JAVA_HOME=C:\opt\jdk-17"
SET PATH=%PATH%;C:\Program Files\Git\usr\bin
cd git-repo
.\gradlew -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false --no-daemon --max-workers=4 build

View File

@ -1,13 +0,0 @@
#!/bin/bash
set -e
source $(dirname $0)/common.sh
repository=$(pwd)/distribution-repository
pushd git-repo > /dev/null
if [[ -d /opt/openjdk-toolchain ]]; then
./gradlew -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false --no-daemon --max-workers=4 -PdeploymentRepository=${repository} build publishAllPublicationsToDeploymentRepository -PtoolchainVersion=${TOOLCHAIN_JAVA_VERSION} -Porg.gradle.java.installations.auto-detect=false -Porg.gradle.java.installations.auto-download=false -Porg.gradle.java.installations.paths=/opt/openjdk-toolchain/
else
./gradlew -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false --no-daemon --max-workers=4 -PdeploymentRepository=${repository} build publishAllPublicationsToDeploymentRepository
fi
popd > /dev/null

View File

@ -1,7 +0,0 @@
source /opt/concourse-java.sh
setup_symlinks
cleanup_maven_repo "org.springframework.boot"
echo 'systemProp.user.name=concourse' > ~/.gradle/gradle.properties

View File

@ -1,35 +0,0 @@
#!/bin/bash
latest_version=$(curl -I -s https://github.com/moby/moby/releases/latest | grep -i "location:" | awk '{n=split($0, parts, "/"); print substr(parts[n],2);}' | awk '{$1=$1;print}' | tr -d '\r' | tr -d '\n' )
if [[ $latest_version =~ (beta|rc) ]]; then
echo "Skip pre-release versions"
exit 0;
fi
title_prefix="Upgrade CI to Docker"
milestone_number=$( curl -u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} -s https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/milestones\?state\=open | jq -c --arg MILESTONE "$MILESTONE" '.[] | select(.title==$MILESTONE)' | jq -r '.number')
existing_upgrade_issues=$( curl -u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} -s https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues\?labels\=type:%20task\&state\=open\&creator\=spring-builds\&milestone\=${milestone_number} | jq -c --arg TITLE_PREFIX "$title_prefix" '.[] | select(.title | startswith($TITLE_PREFIX))' )
latest="https://download.docker.com/linux/static/stable/x86_64/docker-$latest_version.tgz"
current=$( git-repo/ci/images/get-docker-url.sh )
if [[ $current = $latest ]]; then
echo "Already up-to-date"
exit 0;
fi
ISSUE_TITLE="$title_prefix $latest_version"
if [[ ${existing_upgrade_issues} = "" ]]; then
curl \
-s \
-u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} \
-H "Content-type:application/json" \
-d "{\"title\":\"${ISSUE_TITLE}\",\"milestone\":\"${milestone_number}\",\"body\": \"${latest}\",\"labels\":[\"type: task\"]}" \
-f \
-X \
POST "https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues" > /dev/null || { echo "Failed to create issue" >&2; exit 1; }
else
echo "Issue already exists."
fi

View File

@ -1,60 +0,0 @@
#!/bin/bash
report_error() {
echo "Script exited with error $1 on line $2"
exit 1;
}
trap 'report_error $? $LINENO' ERR
case "$JDK_VERSION" in
java17)
BASE_URL="https://api.bell-sw.com/v1/liberica/releases?version-feature=17"
ISSUE_TITLE="Upgrade Java 17 version in CI image and .sdkmanrc"
;;
java21)
BASE_URL="https://api.bell-sw.com/v1/liberica/releases?version-feature=21"
ISSUE_TITLE="Upgrade Java 21 version in CI image"
;;
*)
echo $"Unknown java version"
exit 1;
esac
response=$( curl -s ${BASE_URL}\&arch\=x86\&bitness\=64\&bundle-type\=jdk\&os\=linux\&package-type\=tar.gz\&version-modifier\=latest )
latest=$( jq -r '.[0].downloadUrl' <<< "$response" )
if [[ ${latest} = "null" || ${latest} = "" ]]; then
echo "Could not parse JDK response: $response"
exit 1;
fi
current=$( git-repo/ci/images/get-jdk-url.sh ${JDK_VERSION} )
if [[ $current = $latest ]]; then
echo "Already up-to-date"
exit 0;
fi
milestone_response=$( curl -s -u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/milestones\?state\=open )
milestone_result=$( jq -r -c --arg MILESTONE "$MILESTONE" '.[] | select(has("title")) | select(.title==$MILESTONE)' <<< "$milestone_response" )
if [[ ${milestone_result} = "null" || ${milestone_result} = "" ]]; then
echo "Could not parse milestone: $milestone_response"
exit 1;
fi
milestone_number=$( jq -r '.number' <<< "$milestone_result" )
existing_tasks=$( curl -u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} -s https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues\?labels\=type:%20task\&state\=open\&creator\=spring-builds\&milestone\=${milestone_number} )
existing_jdk_issues=$( jq -r -c --arg TITLE "$ISSUE_TITLE" '.[] | select(has("title")) | select(.title==$TITLE)' <<< "$existing_tasks" )
if [[ ${existing_jdk_issues} = "" ]]; then
curl \
-s \
-u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} \
-H "Content-type:application/json" \
-d "{\"title\":\"${ISSUE_TITLE}\",\"milestone\":\"${milestone_number}\",\"body\": \"${latest}\",\"labels\":[\"type: task\"]}" \
-f \
-X \
POST "https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues" > /dev/null || { echo "Failed to create issue" >&2; exit 1; }
else
echo "Issue already exists."
fi

View File

@ -1,29 +0,0 @@
#!/bin/bash
ISSUE_TITLE="Upgrade Ubuntu version in CI images"
ubuntu="jammy"
latest=$( curl -s "https://hub.docker.com/v2/repositories/library/ubuntu/tags/?page_size=1&page=1&name=$ubuntu" | jq -c -r '.results[0].name' | awk '{split($0, parts, "-"); print parts[2]}' )
current=$( grep "ubuntu:$ubuntu" git-repo/ci/images/ci-image/Dockerfile | awk '{split($0, parts, "-"); print parts[2]}' )
if [[ $current = $latest ]]; then
echo "Already up-to-date"
exit 0;
fi
milestone_number=$( curl -u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} -s https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/milestones\?state\=open | jq -c --arg MILESTONE "$MILESTONE" '.[] | select(.title==$MILESTONE)' | jq -r '.number')
existing_tasks=$( curl -u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} -s https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues\?labels\=type:%20task\&state\=open\&creator\=spring-builds\&milestone\=${milestone_number} )
existing_upgrade_issues=$( echo "$existing_tasks" | jq -c --arg TITLE "$ISSUE_TITLE" '.[] | select(.title==$TITLE)' )
if [[ ${existing_upgrade_issues} = "" ]]; then
curl \
-s \
-u ${GITHUB_USERNAME}:${GITHUB_PASSWORD} \
-H "Content-type:application/json" \
-d "{\"title\":\"${ISSUE_TITLE}\",\"milestone\":\"${milestone_number}\",\"body\": \"Upgrade to ubuntu:${ubuntu}-${latest}\",\"labels\":[\"type: task\"]}" \
-f \
-X \
POST "https://api.github.com/repos/${GITHUB_ORGANIZATION}/${GITHUB_REPO}/issues" > /dev/null || { echo "Failed to create issue" >&2; exit 1; }
else
echo "Issue already exists."
fi

View File

@ -1,12 +0,0 @@
#!/bin/bash
set -e
CONFIG_DIR=git-repo/ci/config
version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' )
java -jar /github-changelog-generator.jar \
--spring.config.location=${CONFIG_DIR}/changelog-generator.yml \
${version} generated-changelog/changelog.md
echo ${version} > generated-changelog/version
echo v${version} > generated-changelog/tag

View File

@ -1,17 +0,0 @@
#!/bin/bash
CONFIG_DIR=git-repo/ci/config
version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' )
export BUILD_INFO_LOCATION=$(pwd)/artifactory-repo/build-info.json
java -jar /concourse-release-scripts.jar \
--spring.config.location=${CONFIG_DIR}/release-scripts.yml \
publishToCentral $RELEASE_TYPE $BUILD_INFO_LOCATION artifactory-repo || { exit 1; }
java -jar /concourse-release-scripts.jar \
--spring.config.location=${CONFIG_DIR}/release-scripts.yml \
promote $RELEASE_TYPE $BUILD_INFO_LOCATION || { exit 1; }
echo "Promotion complete"
echo $version > version/version

View File

@ -1,7 +0,0 @@
#!/bin/bash
source $(dirname $0)/common.sh
version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' )
git-repo/gradlew publishExisting -p git-repo/ci/config/gradle-plugin-publishing -Pgradle.publish.key=${GRADLE_PUBLISH_KEY} -Pgradle.publish.secret=${GRADLE_PUBLISH_SECRET} -PbootVersion=${version} -PrepositoryRoot=$(pwd)/artifactory-repo

View File

@ -1,11 +0,0 @@
#!/bin/bash
CONFIG_DIR=git-repo/ci/config
version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' )
java -jar /concourse-release-scripts.jar \
--spring.config.location=${CONFIG_DIR}/release-scripts.yml \
publishToSdkman $RELEASE_TYPE $version $LATEST_GA || { exit 1; }
echo "Push to SDKMAN complete"

View File

@ -1,12 +0,0 @@
#!/bin/bash
set -e
source $(dirname $0)/common.sh
pushd git-repo > /dev/null
if [[ -d /opt/openjdk-toolchain ]]; then
./gradlew -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false --no-daemon --max-workers=4 systemTest -PtoolchainVersion=${TOOLCHAIN_JAVA_VERSION} -Porg.gradle.java.installations.auto-detect=false -Porg.gradle.java.installations.auto-download=false -Porg.gradle.java.installations.paths=/opt/openjdk-toolchain/
else
./gradlew -Dorg.gradle.internal.launcher.welcomeMessageEnabled=false --no-daemon --max-workers=4 systemTest
fi
popd > /dev/null

View File

@ -1,50 +0,0 @@
#!/bin/bash
set -e
source $(dirname $0)/common.sh
repository=$(pwd)/distribution-repository
pushd git-repo > /dev/null
git fetch --tags --all > /dev/null
popd > /dev/null
git clone git-repo stage-git-repo > /dev/null
pushd stage-git-repo > /dev/null
snapshotVersion=$( awk -F '=' '$1 == "version" { print $2 }' gradle.properties )
if [[ $RELEASE_TYPE = "M" ]]; then
stageVersion=$( get_next_milestone_release $snapshotVersion)
nextVersion=$snapshotVersion
elif [[ $RELEASE_TYPE = "RC" ]]; then
stageVersion=$( get_next_rc_release $snapshotVersion)
nextVersion=$snapshotVersion
elif [[ $RELEASE_TYPE = "RELEASE" ]]; then
stageVersion=$( get_next_release $snapshotVersion)
nextVersion=$( bump_version_number $snapshotVersion)
else
echo "Unknown release type $RELEASE_TYPE" >&2; exit 1;
fi
echo "Staging $stageVersion (next version will be $nextVersion)"
sed -i "s/version=$snapshotVersion/version=$stageVersion/" gradle.properties
git config user.name "Spring Builds" > /dev/null
git config user.email "spring-builds@users.noreply.github.com" > /dev/null
git add gradle.properties > /dev/null
git commit -m"Release v$stageVersion" > /dev/null
git tag -a "v$stageVersion" -m"Release v$stageVersion" > /dev/null
./gradlew --no-daemon --max-workers=4 -PdeploymentRepository=${repository} build publishAllPublicationsToDeploymentRepository
git reset --hard HEAD^ > /dev/null
if [[ $FINAL_RELEASE != true && $nextVersion != $snapshotVersion ]]; then
echo "Setting next development version (v$nextVersion)"
sed -i "s/version=$snapshotVersion/version=$nextVersion/" gradle.properties
git add gradle.properties > /dev/null
git commit -m"Next development version (v$nextVersion)" > /dev/null
fi
echo "DONE"
popd > /dev/null

View File

@ -1,19 +0,0 @@
#!/bin/bash
set -e
version=$( cat artifactory-repo/build-info.json | jq -r '.buildInfo.modules[0].id' | sed 's/.*:.*:\(.*\)/\1/' )
git clone homebrew-tap-repo updated-homebrew-tap-repo > /dev/null
if [[ $LATEST_GA = true ]]; then
pushd updated-homebrew-tap-repo > /dev/null
curl https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-cli/${version}/spring-boot-cli-${version}-homebrew.rb --output spring-boot-cli-${version}-homebrew.rb
rm spring-boot.rb
mv spring-boot-cli-*.rb spring-boot.rb
git config user.name "Spring Builds" > /dev/null
git config user.email "spring-builds@users.noreply.github.com" > /dev/null
git add spring-boot.rb > /dev/null
git commit -m "Upgrade to Spring Boot ${version}" > /dev/null
echo "DONE"
popd > /dev/null
fi

View File

@ -1,30 +0,0 @@
---
platform: linux
image_resource:
type: registry-image
source:
tag: 0.11.1
repository: ((dockerhub-proxy-cache))concourse/oci-build-task
username: ((docker-hub-username))
password: ((docker-hub-password))
inputs:
- name: ci-images-git-repo
outputs:
- name: image
caches:
- path: ci-image-cache
params:
CONTEXT: ci-images-git-repo/ci/images
DOCKERFILE: ci-images-git-repo/ci/images/((ci-image-name))/Dockerfile
DOCKER_HUB_AUTH: ((docker-hub-auth))
BUILD_ARG_DOCKER_PROXY_CACHE: ((dockerhub-proxy-cache))
run:
path: /bin/sh
args:
- "-c"
- |
mkdir -p /root/.docker
cat > /root/.docker/config.json <<EOF
{ "auths": { "https://index.docker.io/v1/": { "auth": "$DOCKER_HUB_AUTH" }}}
EOF
build

View File

@ -1,16 +0,0 @@
---
platform: windows
inputs:
- name: git-repo
outputs:
- name: git-repo
params:
BRANCH:
CI: true
GRADLE_ENTERPRISE_ACCESS_KEY:
GRADLE_ENTERPRISE_CACHE_URL:
GRADLE_ENTERPRISE_CACHE_USERNAME:
GRADLE_ENTERPRISE_CACHE_PASSWORD:
GRADLE_ENTERPRISE_URL: https://ge.spring.io
run:
path: git-repo/ci/scripts/build-project-windows.bat

View File

@ -1,31 +0,0 @@
---
platform: linux
inputs:
- name: git-repo
outputs:
- name: distribution-repository
- name: git-repo
caches:
- path: gradle
- path: maven
params:
BRANCH:
CI: true
GRADLE_ENTERPRISE_ACCESS_KEY:
GRADLE_ENTERPRISE_CACHE_URL:
GRADLE_ENTERPRISE_CACHE_USERNAME:
GRADLE_ENTERPRISE_CACHE_PASSWORD:
GRADLE_ENTERPRISE_URL: https://ge.spring.io
DOCKER_HUB_MIRROR:
run:
path: bash
args:
- "-ec"
- |
mkdir -p /root/.docker
cat > /root/.docker/config.json <<EOF
{ "auths": { "https://index.docker.io/v1/": { "auth": "$DOCKER_HUB_AUTH" }}}
EOF
source /docker-lib.sh
start_docker $DOCKER_HUB_MIRROR
${PWD}/git-repo/ci/scripts/build-project.sh

View File

@ -1,12 +0,0 @@
---
platform: linux
inputs:
- name: git-repo
params:
GITHUB_REPO:
GITHUB_ORGANIZATION:
GITHUB_PASSWORD:
GITHUB_USERNAME:
MILESTONE:
run:
path: git-repo/ci/scripts/detect-docker-updates.sh

View File

@ -1,13 +0,0 @@
---
platform: linux
inputs:
- name: git-repo
params:
GITHUB_REPO:
GITHUB_ORGANIZATION:
GITHUB_PASSWORD:
GITHUB_USERNAME:
JDK_VERSION:
MILESTONE:
run:
path: git-repo/ci/scripts/detect-jdk-updates.sh

View File

@ -1,12 +0,0 @@
---
platform: linux
inputs:
- name: git-repo
params:
GITHUB_REPO:
GITHUB_ORGANIZATION:
GITHUB_PASSWORD:
GITHUB_USERNAME:
MILESTONE:
run:
path: git-repo/ci/scripts/detect-ubuntu-image-updates.sh

View File

@ -1,22 +0,0 @@
---
platform: linux
image_resource:
type: registry-image
source:
repository: ((dockerhub-proxy-cache))springio/github-changelog-generator
tag: '0.0.8'
username: ((docker-hub-username))
password: ((docker-hub-password))
inputs:
- name: git-repo
- name: artifactory-repo
outputs:
- name: generated-changelog
params:
GITHUB_ORGANIZATION:
GITHUB_REPO:
GITHUB_USERNAME:
GITHUB_TOKEN:
RELEASE_TYPE:
run:
path: git-repo/ci/scripts/generate-changelog.sh

View File

@ -1,25 +0,0 @@
---
platform: linux
image_resource:
type: registry-image
source:
repository: ((dockerhub-proxy-cache))springio/concourse-release-scripts
tag: '0.4.0'
username: ((docker-hub-username))
password: ((docker-hub-password))
inputs:
- name: git-repo
- name: artifactory-repo
outputs:
- name: version
params:
RELEASE_TYPE:
ARTIFACTORY_URL:
ARTIFACTORY_USERNAME:
ARTIFACTORY_PASSWORD:
SONATYPE_USERNAME:
SONATYPE_PASSWORD:
SONATYPE_URL:
SONATYPE_STAGING_PROFILE_ID:
run:
path: git-repo/ci/scripts/promote.sh

View File

@ -1,10 +0,0 @@
---
platform: linux
inputs:
- name: artifactory-repo
- name: git-repo
params:
GRADLE_PUBLISH_KEY:
GRADLE_PUBLISH_SECRET:
run:
path: git-repo/ci/scripts/publish-gradle-plugin.sh

View File

@ -1,20 +0,0 @@
---
platform: linux
image_resource:
type: registry-image
source:
repository: ((dockerhub-proxy-cache))springio/concourse-release-scripts
tag: '0.4.0'
username: ((docker-hub-username))
password: ((docker-hub-password))
inputs:
- name: git-repo
- name: artifactory-repo
params:
RELEASE_TYPE:
BRANCH:
LATEST_GA:
SDKMAN_CONSUMER_KEY:
SDKMAN_CONSUMER_TOKEN:
run:
path: git-repo/ci/scripts/publish-to-sdkman.sh

View File

@ -1,29 +0,0 @@
---
platform: linux
inputs:
- name: git-repo
outputs:
- name: git-repo
caches:
- path: gradle
params:
BRANCH:
CI: true
GRADLE_ENTERPRISE_ACCESS_KEY:
GRADLE_ENTERPRISE_CACHE_URL:
GRADLE_ENTERPRISE_CACHE_USERNAME:
GRADLE_ENTERPRISE_CACHE_PASSWORD:
GRADLE_ENTERPRISE_URL: https://ge.spring.io
DOCKER_HUB_MIRROR:
run:
path: bash
args:
- -ec
- |
mkdir -p /root/.docker
cat > /root/.docker/config.json <<EOF
{ "auths": { "https://index.docker.io/v1/": { "auth": "$DOCKER_HUB_AUTH" }}}
EOF
source /docker-lib.sh
start_docker $DOCKER_HUB_MIRROR
${PWD}/git-repo/ci/scripts/run-system-tests.sh

View File

@ -1,19 +0,0 @@
---
platform: linux
inputs:
- name: git-repo
outputs:
- name: stage-git-repo
- name: distribution-repository
params:
RELEASE_TYPE:
CI: true
FINAL_RELEASE:
GRADLE_ENTERPRISE_CACHE_URL:
GRADLE_ENTERPRISE_CACHE_USERNAME:
GRADLE_ENTERPRISE_CACHE_PASSWORD:
GRADLE_ENTERPRISE_URL: https://ge.spring.io
caches:
- path: gradle
run:
path: git-repo/ci/scripts/stage.sh

View File

@ -1,12 +0,0 @@
---
platform: linux
inputs:
- name: git-repo
- name: homebrew-tap-repo
- name: artifactory-repo
outputs:
- name: updated-homebrew-tap-repo
params:
LATEST_GA:
run:
path: git-repo/ci/scripts/update-homebrew-tap.sh

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2022 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,7 +20,6 @@ import org.eclipse.jetty.http.UriCompliance;
import org.eclipse.jetty.server.AllowedResourceAliasChecker;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer;
@ -30,24 +29,19 @@ import org.springframework.context.annotation.Configuration;
/**
* {@link JettyServerCustomizer} that:
* <ul>
* <li>Approves all aliases (Used for Windows CI on
* Concourse)
* <li>Relaxes URI compliance to allow access to static resources with {@code %} in their file name.
* </ul>
*
* @author Madhura Bhave
* @author Andy Wilkinson
*/
@ConditionalOnClass(name = {"org.eclipse.jetty.server.handler.ContextHandler"})
@ConditionalOnClass(name = "org.eclipse.jetty.server.Connector")
@Configuration(proxyBeanMethods = false)
public class JettyServerCustomizerConfig {
@Bean
public JettyServerCustomizer jettyServerCustomizer() {
return (server) -> {
ContextHandler handler = (ContextHandler) server.getHandler();
handler.addAliasCheck((path, resource) -> true);
for (Connector connector : server.getConnectors()) {
connector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration()
.setUriCompliance(UriCompliance.LEGACY);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2022 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,16 +16,12 @@
package smoketest.jetty.jsp;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@ -36,8 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Phillip Webb
*/
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT,
classes = { SampleWebJspApplicationTests.JettyCustomizerConfig.class, SampleJettyJspApplication.class })
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class SampleWebJspApplicationTests {
@Autowired
@ -50,19 +45,4 @@ class SampleWebJspApplicationTests {
assertThat(entity.getBody()).contains("/resources/text.txt");
}
@Configuration(proxyBeanMethods = false)
static class JettyCustomizerConfig {
// To allow aliased resources on Concourse Windows CI (See gh-15553) to be served
// as static resources.
@Bean
JettyServerCustomizer jettyServerCustomizer() {
return (server) -> {
ContextHandler handler = (ContextHandler) server.getHandler();
handler.addAliasCheck((path, resource) -> true);
};
}
}
}