-
Notifications
You must be signed in to change notification settings - Fork 30
162 lines (139 loc) · 6.2 KB
/
deploy.yml
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
152
153
154
155
156
157
158
159
160
161
162
name: Deploy
on:
push:
branches: ['master']
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
concurrency:
group: ${{ github.repository }}
cancel-in-progress: false
jobs:
update-versions:
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
numFilesChanged: ${{ steps.updateVersions.outputs.numFilesChanged }}
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 8
cache: 'maven'
- name: Setup Git Config
run: |
git config user.name "Github Action"
git config user.email "github-action@users.noreply.github.com"
- name: Update versions
id: updateVersions
run: |
mvn clean versions:update-properties -U
echo numFilesChanged=$(git status --porcelain=1 | wc -l) >> "$GITHUB_OUTPUT"
mvn scm:checkin -Dmessage='automatic update of mvn version dependencies'
env:
OPENMRS_MAVEN_USERNAME: ${{ secrets.OPENMRS_MAVEN_USERNAME }}
OPENMRS_MAVEN_PASSWORD: ${{ secrets.OPENMRS_MAVEN_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
check-for-dependencies:
needs: update-versions
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
hasChanges: ${{ steps.checkDependencies.outputs.hasChanged }}
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 8
cache: 'maven'
- name: Check dependencies
id: checkDependencies
shell: bash
run: |
#!/usr/bin/env bash
set -e
MAVEN_ARGS="-DskipTests"
hasChanged=0
# Determine the modules for which the dependency report will be run and needs to be checked
echo "List of modules to check for dependency changes:"
moduleBuildDirs=$(mvn -q $MAVEN_ARGS --also-make exec:exec -Dexec.executable="echo" -Dexec.args='${project.build.directory}')
echo "$moduleBuildDirs"
# Execute a local build to clean target directories and generate up-to-date dependency reports
echo "Compile the latest version of the dependency report"
mvn --batch-mode --no-transfer-progress clean package $MAVEN_ARGS
# Iterate over each module to compare each dependency report
for moduleBuildDir in ${moduleBuildDirs}; do
moduleBuildDir=$(echo "${moduleBuildDir}" | sed 's/\\/\//g')
pomFile=$(dirname "${moduleBuildDir}")/pom.xml
# Get the groupId, artifactId, and version
groupId=$(mvn help:evaluate -Dexpression=project.groupId -q -DforceStdout -f "${pomFile}")
artifactId=$(mvn help:evaluate -Dexpression=project.artifactId -q -DforceStdout -f "${pomFile}")
version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout -f "${pomFile}")
classifier=$(mvn help:evaluate -Dexpression=dependencyReportClassifier -q -DforceStdout -f "${pomFile}")
artifact="${groupId}":"${artifactId}":"${version}":txt:"${classifier}"
filename="${artifactId}-${version}-${classifier}.txt"
newDependencyReportPath="${moduleBuildDir}/${filename}"
remoteDependencyReportDir="${moduleBuildDir}/remote-dependency-report"
remoteDependencyReportPath="${remoteDependencyReportDir}/${filename}"
if [ ! -f "${newDependencyReportPath}" ]; then
echo "No dependency report generated at '${newDependencyReportPath}'"
else
# Fetch the remote dependency report
echo "Fetch remote dependency report ${artifact}..."
set +e
mvn --batch-mode --no-transfer-progress org.apache.maven.plugins:maven-dependency-plugin:3.6.0:get -Dartifact=${artifact} -Dtransitive=false
mvn --batch-mode --no-transfer-progress org.apache.maven.plugins:maven-dependency-plugin:3.6.0:copy -Dartifact=${artifact} -DoutputDirectory="${remoteDependencyReportDir}/" -Dmdep.useBaseVersion=true
set -e
# If no dependency report was fetched, then this is a change
if [ ! -f "${remoteDependencyReportPath}" ]; then
echo "No matching remote dependency report found."
hasChanged=1
else
# Compare the 2 files. Will exit with 0 if no change, 1 if changes
echo "Compare both dependency reports..."
set +e
diff "${newDependencyReportPath}" "${remoteDependencyReportPath}"
diff_rc=$?
if [ $diff_rc -eq 0 ]; then
echo "No dependency change"
elif [ $diff_rc -eq 1 ]; then
echo "One or more dependency has changed"
hasChanged=1
else
echo "Unknown error occurred."
fi
fi
fi
done
if [ ${hasChanged} -eq 0 ]; then
echo "Check completed: No changes detected"
else
echo "Check completed: Dependency changes detected"
fi
# Export hasChanged to be used in later steps of the GitHub workflow
echo hasChanged=$hasChanged >> "$GITHUB_OUTPUT"
exit 0
deploy:
needs: [ update-versions, check-for-dependencies ]
if: ${{ github.event_name == 'push' || needs.update-versions.outputs.numFilesChanged > 1 || needs.check-for-dependencies.outputs.hasChanged > 0 }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 8
cache: 'maven'
server-id: openmrs-repo-modules-pih
server-username: OPENMRS_MAVEN_USERNAME
server-password: OPENMRS_MAVEN_PASSWORD
- name: Maven Deploy
run: mvn -B deploy --file pom.xml
env:
OPENMRS_MAVEN_USERNAME: ${{ secrets.OPENMRS_MAVEN_USERNAME }}
OPENMRS_MAVEN_PASSWORD: ${{ secrets.OPENMRS_MAVEN_PASSWORD }}