-
Notifications
You must be signed in to change notification settings - Fork 54
144 lines (143 loc) · 5.66 KB
/
gradle.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
# The following workflow provides an opinionated template you can customize for your own needs.
#
# If you are not an Octopus user, the "Push to Octopus", "Generate Octopus Deploy build information",
# and "Create Octopus Release" steps can be safely deleted.
#
# To configure Octopus, set the OCTOPUS_API_TOKEN secret to the Octopus API key, and
# set the OCTOPUS_SERVER_URL secret to the Octopus URL.
#
# Double check the "project" and "deploy_to" properties in the "Create Octopus Release" step
# match your Octopus projects and environments.
#
# Get a trial Octopus instance from https://octopus.com/start
name: Java Gradle Build
'on':
workflow_dispatch: {}
push: {}
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: '0'
- name: Install GitVersion
uses: gittools/actions/gitversion/setup@v0.9.15
with:
versionSpec: 5.x
- id: determine_version
name: Determine Version
uses: gittools/actions/gitversion/execute@v0.9.15
with:
additionalArguments: /overrideconfig mode=Mainline
- name: Install Octopus Deploy CLI
uses: OctopusDeploy/install-octopus-cli-action@v1
with:
version: latest
- name: Set up JDK 1.17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: adopt
- name: List Dependencies
run: ./gradlew dependencies --console=plain > dependencies.txt
shell: bash
- name: Collect Dependencies
uses: actions/upload-artifact@v2
with:
name: Dependencies
path: dependencies.txt
- name: Test
run: ./gradlew check --console=plain
shell: bash
- if: always()
name: Report
uses: dorny/test-reporter@v1
with:
name: Gradle Tests
path: build/test-results/**/*.xml
reporter: java-junit
fail-on-error: 'false'
- name: Package
run: ./gradlew clean assemble --console=plain
shell: bash
- id: get_artifact
name: Get Artifact Path
run: |-
# Find the largest WAR or JAR, and assume that was what we intended to build.
echo "::set-output name=artifact::$(find build -type f \( -iname \*.jar -o -iname \*.war \) -printf "%p\n" | sort -n | head -1)"
shell: bash
- id: get_artifact_name
name: Get Artifact Name
run: |-
# Get the filename without a path
path="${{ steps.get_artifact.outputs.artifact }}"
echo "::set-output name=artifact::${path##*/}"
shell: bash
- name: Tag Release
uses: mathieudutour/github-tag-action@v6.1
with:
custom_tag: ${{ steps.determine_version.outputs.semVer }}
github_token: ${{ secrets.GITHUB_TOKEN }}
- id: create_release
name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.determine_version.outputs.semVer }}+run${{ github.run_number }}-attempt${{ github.run_attempt }}
release_name: Release ${{ steps.determine_version.outputs.semVer }} Run ${{ github.run_number }} Attempt ${{ github.run_attempt }}
draft: 'false'
prerelease: 'false'
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ${{ steps.get_artifact.outputs.artifact }}
asset_name: ${{ steps.get_artifact_name.outputs.artifact }}
asset_content_type: application/octet-stream
- id: get_octopus_artifact
name: Create Octopus Artifact
run: |
# Octopus expects artifacts to have a specific file format
file="${{ steps.get_artifact.outputs.artifact }}"
extension="${file##*.}"
octofile="SampleGradleProject-SpringBoot.${{ steps.determine_version.outputs.semVer }}.${extension}"
cp ${file} ${octofile}
echo "::set-output name=artifact::${octofile}"
# The version used when creating a release is the package id, colon, and version
octoversion="SampleGradleProject-SpringBoot:${{ steps.determine_version.outputs.semVer }}"
echo "::set-output name=octoversion::${octoversion}"
shell: bash
- name: Push packages to Octopus Deploy
uses: OctopusDeploy/push-package-action@v2
env:
OCTOPUS_API_KEY: ${{ secrets.OCTOPUS_API_TOKEN }}
OCTOPUS_CLI_SERVER: ${{ secrets.OCTOPUS_SERVER_URL }}
with:
packages: ${{ steps.get_octopus_artifact.outputs.artifact }}
overwrite_mode: OverwriteExisting
- name: Generate Octopus Deploy build information
uses: OctopusDeploy/push-build-information-action@v3
env:
OCTOPUS_API_KEY: ${{ secrets.OCTOPUS_API_TOKEN }}
OCTOPUS_URL: ${{ secrets.OCTOPUS_SERVER_URL }}
OCTOPUS_SPACE: ${{ secrets.OCTOPUS_SPACE }}
with:
version: ${{ steps.determine_version.outputs.semVer }}
packages: SampleGradleProject-SpringBoot
overwrite_mode: OverwriteExisting
- name: Create Octopus Release
uses: OctopusDeploy/create-release-action@v1
with:
api_key: ${{ secrets.OCTOPUS_API_TOKEN }}
project: SampleGradleProject-SpringBoot
server: ${{ secrets.OCTOPUS_SERVER_URL }}
deploy_to: Development
packages: ${{ steps.get_octopus_artifact.outputs.octoversion }}
permissions:
id-token: write
checks: write
contents: write