-
Notifications
You must be signed in to change notification settings - Fork 0
/
action.yml
150 lines (147 loc) · 6.12 KB
/
action.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
name: "Liferay Upgrade"
description: "Create a new branch and pull request if a new Liferay version is available"
author: "lgdd"
branding:
icon: "git-branch"
color: "blue"
inputs:
java-version:
description: >
Java version (default: '11')
Check Liferay compatibility matrix: https://www.liferay.com/compatibility-matrix.
required: true
default: "11"
java-distribution:
description: >
Java distribution (default: 'zulu')
List of supported distributions for the setup-java action: https://github.com/actions/setup-java#supported-distributions
Also check Liferay compatibility matrix: https://www.liferay.com/compatibility-matrix
required: true
default: "zulu"
workspace-directory:
description: >
Path to your workspace if different from root directory.
It will be use in this actions steps for the 'working-directory' directive.
required: false
default: .
runs:
using: composite
steps:
- name: Get Liferay Info
id: get-liferay-info
uses: lgdd/get-liferay-info-action@v1
with:
workspace-directory: ${{ inputs.workspace-directory }}
- name: Set Env with Liferay Info
uses: actions/github-script@v6
env:
LFR_CURRENT_PRODUCT_NAME: ${{ steps.get-liferay-info.outputs.current-product-name }}
LFR_LATEST_PRODUCT_NAME: ${{ steps.get-liferay-info.outputs.latest-product-name }}
LFR_LATEST_PRODUCT_VERSION_NAME: ${{ steps.get-liferay-info.outputs.latest-product-version-name }}
with:
script: |
const { LFR_CURRENT_PRODUCT_NAME, LFR_LATEST_PRODUCT_NAME, LFR_LATEST_PRODUCT_VERSION_NAME } = process.env;
const upgradeBranchName = `upgrade-to-${LFR_LATEST_PRODUCT_NAME.replaceAll('.', '')}`;
core.exportVariable("LFR_CURRENT_PRODUCT_NAME", LFR_CURRENT_PRODUCT_NAME)
core.exportVariable("LFR_LATEST_PRODUCT_NAME", LFR_LATEST_PRODUCT_NAME)
core.exportVariable("LFR_LATEST_PRODUCT_VERSION_NAME", LFR_LATEST_PRODUCT_VERSION_NAME)
core.exportVariable("UPGRADE_BRANCH_NAME", upgradeBranchName)
- name: Check If Upgrade Needed
shell: bash
id: check-upgrade
run: |
if [ "${{ env.LFR_LATEST_PRODUCT_NAME }}" = "${{ env.LFR_CURRENT_PRODUCT_NAME }}" ]; then
echo "Already on the latest version: ${{ env.LFR_LATEST_PRODUCT_NAME }}"
echo "status=skip" >> $GITHUB_OUTPUT
else
echo "Run upgrade from ${{ env.LFR_CURRENT_PRODUCT_NAME }} to ${{ env.LFR_LATEST_PRODUCT_NAME }}"
echo "status=upgrade" >> $GITHUB_OUTPUT
fi;
- name: Check Upgrade Branch
shell: bash
id: check-branch
if: steps.check-upgrade.outputs.status == 'upgrade'
run: |
NO_UPGRADE_BRANCH=$(git ls-remote -q | grep -q '${{ env.UPGRADE_BRANCH_NAME }}' && echo false || echo true)
echo "NO_UPGRADE_BRANCH=$NO_UPGRADE_BRANCH" >> $GITHUB_ENV
if [ $NO_UPGRADE_BRANCH = true ]; then
echo "Upgrade branch ${{ env.UPGRADE_BRANCH_NAME }} doesn't exist."
echo "status=upgrade" >> $GITHUB_OUTPUT
else
echo "Upgrade branch ${{ env.UPGRADE_BRANCH_NAME }} already exists."
echo "status=skip" >> $GITHUB_OUTPUT
fi;
- name: Set up JDK
uses: actions/setup-java@v3
if: steps.check-branch.outputs.status == 'upgrade'
with:
distribution: ${{ inputs.java-distribution }}
java-version: ${{ inputs.java-version }}
- name: Cache Gradle Packages
uses: actions/cache@v3
if: steps.check-branch.outputs.status == 'upgrade'
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build Workspace
shell: bash
if: steps.check-branch.outputs.status == 'upgrade'
id: build-workspace
working-directory: ${{ inputs.workspace-directory }}
run: |
sed -i -e 's/${{ env.LFR_CURRENT_PRODUCT_NAME }}/${{ env.LFR_LATEST_PRODUCT_NAME }}/g' gradle.properties
./gradlew
./gradlew build -S > gradle-out.txt 2> gradle-err.txt
cat gradle-out.txt >> gradle-build.txt
cat gradle-err.txt >> gradle-build.txt
if [ -s gradle-err.txt ]; then
cat gradle-err.txt
rm gradle-err.txt
rm gradle-out.txt
echo "❌ Build failed with output:" >> pr-body.md
exit 1
else
cat gradle-out.txt
rm gradle-err.txt
rm gradle-out.txt
echo "✅ Build succeeded with output:" >> pr-body.md
exit 0
fi;
- name: Create Branch & Commit Changes
shell: bash
if: always() && steps.check-branch.outputs.status == 'upgrade'
id: create-branch
working-directory: ${{ inputs.workspace-directory }}
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
git checkout -b ${{ env.UPGRADE_BRANCH_NAME }}
git add --all -- ':!gradle-build.txt'
git commit -m "chore: upgrade to ${{ env.LFR_LATEST_PRODUCT_NAME }}"
git push -u origin ${{ env.UPGRADE_BRANCH_NAME }}
- name: Create Pull Request
shell: bash
if: steps.check-branch.outputs.status == 'upgrade'
id: create-pull-request
working-directory: ${{ inputs.workspace-directory }}
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "\`\`\`" >> pr-body.md
cat gradle-build.txt >> pr-body.md
echo "\`\`\`" >> pr-body.md
gh pr create \
--assignee "${{ github.repository_owner }}" \
--base "${{ env.GITHUB_REF_NAME }}" \
--head "${{ env.UPGRADE_BRANCH_NAME }}" \
--title "[Liferay Upgrade] To ${{ env.LFR_LATEST_PRODUCT_VERSION_NAME }}" \
--body-file pr-body.md
- name: Remove Branch If Pull Request Fails
shell: bash
if: steps.create-branch.outcome == 'success' && steps.create-pull-request.outcome == 'failure'
run: |
git push origin -d ${{ env.UPGRADE_BRANCH_NAME }}