-
Notifications
You must be signed in to change notification settings - Fork 0
152 lines (136 loc) · 5.39 KB
/
deploy.yml
File metadata and controls
152 lines (136 loc) · 5.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
name: Spring Cloud Deploy (Reusable)
on:
workflow_call:
inputs:
branches:
description: 'Which branch(es) should be built - single branch or comma-separated list (e.g., "main,3.3.x,3.2.x")'
required: false
type: string
custom_build_command:
description: 'Custom run command for the Build and Deploy step (overrides default Maven command)'
required: false
type: string
runs_on:
description: 'Runner to use for the build job (defaults to ubuntu-latest)'
required: false
type: string
secrets:
ARTIFACTORY_USERNAME:
required: true
ARTIFACTORY_PASSWORD:
required: true
COMMERCIAL_ARTIFACTORY_USERNAME:
required: false
COMMERCIAL_ARTIFACTORY_PASSWORD:
required: false
DOCKERHUB_USERNAME:
required: true
DOCKERHUB_TOKEN:
required: true
jobs:
setup:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Determine branches and JDK versions
id: set-matrix
uses: spring-cloud/spring-cloud-github-actions/.github/actions/determine-matrix@main
with:
repository: ${{ github.repository }}
event-name: ${{ github.event_name }}
ref-name: ${{ github.ref_name }}
branches: ${{ inputs.branches }}
build:
name: Build ${{ matrix.branch }} (JDK ${{ matrix.java-version }})
needs: setup
runs-on: ${{ inputs.runs_on || 'ubuntu-latest' }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.setup.outputs.matrix) }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ matrix.branch }}
clean: true
- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java-version }}
distribution: 'temurin'
cache: 'maven'
- name: Configure Maven settings
uses: s4u/maven-settings-action@v3.0.0
with:
servers: |
[{
"id": "repo.spring.io",
"username": "${{ secrets.ARTIFACTORY_USERNAME }}",
"password": "${{ secrets.ARTIFACTORY_PASSWORD }}"
},
{
"id": "spring-commercial-snapshot",
"username": "${{ secrets.COMMERCIAL_ARTIFACTORY_USERNAME }}",
"password": "${{ secrets.COMMERCIAL_ARTIFACTORY_PASSWORD }}"
},
{
"id": "spring-commercial-release",
"username": "${{ secrets.COMMERCIAL_ARTIFACTORY_USERNAME }}",
"password": "${{ secrets.COMMERCIAL_ARTIFACTORY_PASSWORD }}"
}]
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Stop running Docker containers
continue-on-error: true
run: |
#!/bin/bash
if command -v timeout &> /dev/null; then
timeout 10s docker ps -a -q | xargs -n 1 -P 8 -I {} docker stop {} || echo "Failed to stop docker... Hopefully you know what you're doing"
fi
- name: Verify Maven installation
run: ./mvnw --version
- name: Set build configuration
run: |
# Determine if docs profile should be included and if artifacts should be deployed
# Logic: Include docs and deploy if (has-jdk8=true AND java-version=8) OR (has-jdk8=false AND java-version=17)
BUILD_WITH_DOCS=false
SHOULD_DEPLOY=false
if [[ ("${{ matrix.has-jdk8 }}" == "true" && "${{ matrix.java-version }}" == "8") ]] || [[ ("${{ matrix.has-jdk8 }}" == "false" && "${{ matrix.java-version }}" == "17") ]]; then
BUILD_WITH_DOCS=true
SHOULD_DEPLOY=true
echo "Docs profile will be included in this build"
echo "This build will deploy artifacts"
else
echo "Docs profile will NOT be included in this build"
echo "This build will NOT deploy artifacts"
fi
echo "BUILD_WITH_DOCS=$BUILD_WITH_DOCS" >> $GITHUB_ENV
echo "SHOULD_DEPLOY=$SHOULD_DEPLOY" >> $GITHUB_ENV
echo "Build configuration: BUILD_WITH_DOCS=$BUILD_WITH_DOCS, SHOULD_DEPLOY=$SHOULD_DEPLOY"
- name: Build
if: ${{ inputs.custom_build_command == '' && env.SHOULD_DEPLOY == 'false' }}
run: |
# Run Maven install for non-deploying JDK versions (no docs profile needed)
echo "Building without deployment"
./mvnw clean install -Pspring -B -U
- name: Build and deploy
if: ${{ inputs.custom_build_command == '' && env.SHOULD_DEPLOY == 'true' }}
run: |
# Run Maven deploy for the designated JDK version (always includes docs profile)
echo "Building with docs profile and deploying artifacts"
./mvnw clean deploy -Pdocs,deploy,spring -B -U
- name: Custom build command
if: ${{ inputs.custom_build_command != '' }}
env:
CUSTOM_BUILD_COMMAND: ${{ inputs.custom_build_command }}
run: |
# Execute custom build command provided by caller
printf '%s\n' "$CUSTOM_BUILD_COMMAND" > /tmp/build-deploy.sh
chmod +x /tmp/build-deploy.sh
bash /tmp/build-deploy.sh