Skip to content

Commit db96158

Browse files
Merge pull request #2 from minesh-s-patel/th-buildmigration-actions
Maven build migration actions
2 parents b4ee7d6 + 9f743c7 commit db96158

File tree

2 files changed

+102
-46
lines changed

2 files changed

+102
-46
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
name: Maven Build
2+
description: Run a Maven Build
3+
4+
inputs:
5+
build-command:
6+
description: The Maven command to build the project. The default is `package`.
7+
required: false
8+
# type: string - `type` field is not supported (yet). See comment below.
9+
default: install
10+
release-name:
11+
description: The Maven artifact name and version.
12+
required: true
13+
build-flags:
14+
description: The Maven build flags
15+
required: false
16+
default: '-Dmaven.repo.local=$GITHUB_WORKSPACE/.m2' # why the local artifactory is required
17+
#deploy-flags: #compose from build-flags and maven-settings
18+
# description: The Maven deploy flags
19+
# required: false
20+
# default: '-s $GITHUB_WORKSPACE/settings.xml -Dmaven.repo.local=$GITHUB_WORKSPACE/.m2' # not required since actions/setup-java allows the definition of the settings file path and build-flags already define the ref to the local artifactory
21+
build-profiles:
22+
description: The maven build profiles
23+
required: false
24+
default: 'daml,scala,typescript,golang,csharp8,csharp9,kotlin,python,full,gpg,excel' # TBD whether this is useful for the parallel build tasks
25+
maven-settings:
26+
description: The Maven settings file
27+
required: false
28+
default: $GITHUB_WORKSPACE
29+
30+
runs:
31+
using: "composite"
32+
steps:
33+
- name: Set up JDK 11 for x64
34+
uses: actions/setup-java@v4
35+
with:
36+
java-version: '11'
37+
distribution: 'temurin'
38+
architecture: x64
39+
cache: maven
40+
server-id: ossrh
41+
server-username: CI_DEPLOY_USERNAME
42+
server-password: CI_DEPLOY_PASSWORD
43+
settings-path: ${{inputs.maven-settings}}
44+
gpg-private-key: GPG_PRIVATE_KEY
45+
gpg-passphrase: GPG_PASSPHRASE
46+
- name: Set artifact version with Maven
47+
shell: bash
48+
run: mvn ${{inputs.build-flags}} versions:set -DnewVersion=${{inputs.release-name}} versions:update-child-modules -DallowSnapshots=true
49+
- name: Build and deploy artifact with Maven
50+
shell: bash
51+
run: mvn ${{inputs.build-flags}} clean ${{inputs.build-command}} -P ${{inputs.build-profiles}}
Lines changed: 51 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
11
name: Java CI with Maven
22

33
on:
4-
push:
5-
branches: [ "master", "develop" ]
6-
pull_request:
7-
branches: [ "master", "develop" ]
8-
4+
push: #triggers on tag push event
5+
tags:
6+
- '**'
7+
pull_request: #triggers on PR merge event into develop branch
8+
types:
9+
- closed
10+
911
jobs:
1012
setup: # defines the variables used across all job's steps and output variables to be used across jobs.
1113
runs-on: ubuntu-latest
1214
env: # environment variables used across the setup job
13-
# GPG config demo - TBD: proposal using secrets
14-
REPO_PATH: "$GITHUB_WORKSPACE" # Not required
15-
MVN_DEPLOY_FLAGS: "-s $GITHUB_WORKSPACE/settings.xml -Dmaven.repo.local=$GITHUB_WORKSPACE/.m2 -Denv.CI_DEPLOY_PASSWORD=$GITHUB_TOKEN -Denv.CI_DEPLOY_USERNAME=$GITHUB_USER -Denv.GPG_KEYNAME=${{secrets.GPG_KEYNAME}} -Denv.GPG_PASSPHRASE=${{secrets.GPG_PASSPHRASE}}"
1615
MVN_BUILD_FLAGS: "-Dmaven.repo.local=$GITHUB_WORKSPACE/.m2"
17-
# GPG_IMPORT_COMMAND: "cat <(echo -e '${{secrets.GPG_PRIVATE_KEY}}') | gpg --batch --import" - can be used if GPG is handled through secrets.
16+
MVN_DEPLOY_FLAGS: "-s $GITHUB_WORKSPACE/settings.xml"
1817
GEN_DEPLOY_POM_SCRIPT: "$GITHUB_WORKSPACE/rosetta-source/src/main/resources/build-resources/create-deploy-pom.sh"
1918
GEN_DEPLOY_POM_PY: "$GITHUB_WORKSPACE/rosetta-source/src/main/resources/build-resources/create-deploy-pom.py"
2019
outputs:
21-
REPO_PATH: ${{env.REPO_PATH}}
22-
MVN_DEPLOY_FLAGS: ${{env.MVN_DEPLOY_FLAGS}}
2320
MVN_BUILD_FLAGS: ${{env.MVN_BUILD_FLAGS}}
24-
GPG_IMPORT_COMMAND: ${{steps.set_props.outputs.GPG_IMPORT_COMMAND}}
21+
MVN_DEPLOY_FLAGS: ${{env.MVN_DEPLOY_FLAGS}}
2522
RELEASE_NAME: ${{steps.release_props.outputs.RELEASE_NAME}}
2623
RELEASE_MAVEN_BUILD_PROFILES: ${{steps.release_props.outputs.MAVEN_BUILD_PROFILES}}
2724
RELEASE_MVN_DEPLOY_FILE_FLAGS: ${{steps.release_props.outputs.MVN_DEPLOY_FILE_FLAGS}}
@@ -31,63 +28,71 @@ jobs:
3128

3229
steps:
3330
- name: main_clone
34-
uses: actions/checkout@v2
35-
36-
- name: SetProperties
37-
id: set_props
38-
shell: bash
39-
run: echo "GPG_IMPORT_COMMAND=${{env.GPG_IMPORT_COMMAND}}" >> "$GITHUB_OUTPUT"
40-
env:
41-
GPG_IMPORT_COMMAND: "cat <(echo -e '${{secrets.GPG_PRIVATE_KEY}}') | gpg --batch --import"
31+
uses: actions/checkout@v4
4232

4333
- name: ReleaseProperties
4434
id: release_props
45-
if: "contains(github.ref, 'master')"
35+
if: startsWith(github.ref, 'refs/tags')
4636
shell: bash
4737
run: |
48-
echo "=== Global variable resolution ==="
49-
echo "REPO_PATH: ${{env.REPO_PATH}}"
50-
echo "=== Local variable resolution ==="
5138
echo "RELEASE_NAME=${{env.RELEASE_NAME}}" >> "$GITHUB_OUTPUT"
52-
echo "MAVEN_BUILD_PROFILES=${{env.MAVEN_BUILD_PROFILES}}" >> "$GITHUB_OUTPUT"
53-
echo "MVN_DEPLOY_FILE_FLAGS=${{env.MVN_DEPLOY_FILE_FLAGS}}" >> "$GITHUB_OUTPUT"
39+
echo "RELEASE_MAVEN_BUILD_PROFILES=${{env.MAVEN_BUILD_PROFILES}}" >> "$GITHUB_OUTPUT"
40+
echo "RELEASE_MVN_DEPLOY_FILE_FLAGS=${{env.MVN_DEPLOY_FILE_FLAGS}}" >> "$GITHUB_OUTPUT"
5441
env:
55-
RELEASE_NAME: "${{github.ref_name}}" # not resoled hot to define release name (e.g. $github.tag)
42+
RELEASE_NAME: "${{github.event.release.tag_name}}"
5643
MAVEN_BUILD_PROFILES: "daml,scala,typescript,golang,csharp8,csharp9,kotlin,python,full,gpg,excel"
57-
MVN_DEPLOY_FILE_FLAGS: "${{env.MVN_BUILD_FLAGS}} ${{env.MVN_DEPLOY_FLAGS}} -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2 -DrepositoryId=ossrh-distro -Dgpg.passphrase=${{env.GPG_PASSPHRASE}}"
44+
MVN_DEPLOY_FILE_FLAGS: "${{env.MVN_BUILD_FLAGS}} ${{env.MVN_DEPLOY_FLAGS}} -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2 -DrepositoryId=ossrh-distro"
5845

5946
- name: SnapshotProperties
6047
id: snapshot_props
61-
if: "contains(github.ref, 'develop')"
48+
if: github.ref == 'refs/heads/develop' && github.event.pull_request.merged == true
6249
shell: bash
6350
run: |
64-
echo "=== Global variable resolution ==="
65-
echo "REPO_PATH: ${{env.REPO_PATH}}"
66-
echo "=== Local variable resolution ==="
67-
echo "RELEASE_NAME=${{env.RELEASE_NAME}}" >> "$GITHUB_OUTPUT"
68-
echo "MAVEN_BUILD_PROFILES=${{env.MAVEN_BUILD_PROFILES}}" >> "$GITHUB_OUTPUT"
69-
echo "MVN_DEPLOY_FILE_FLAGS=${{env.MVN_DEPLOY_FILE_FLAGS}}" >> "$GITHUB_OUTPUT"
51+
echo "SNAPSHOT_NAME=${{env.RELEASE_NAME}}" >> "$GITHUB_OUTPUT"
52+
echo "SNAPSHOT_MAVEN_BUILD_PROFILES=${{env.MAVEN_BUILD_PROFILES}}" >> "$GITHUB_OUTPUT"
53+
echo "SNAPSHOT_MVN_DEPLOY_FILE_FLAGS=${{env.MVN_DEPLOY_FILE_FLAGS}}" >> "$GITHUB_OUTPUT"
7054
env:
7155
RELEASE_NAME: "${{github.ref_name}}-SNAPSHOT" # not resolved how to define snapshot name
7256
MAVEN_BUILD_PROFILES: "daml,scala,typescript,golang,csharp8,csharp9,kotlin,python,gpg,excel"
73-
MVN_DEPLOY_FILE_FLAGS: "${{env.MVN_BUILD_FLAGS}} ${{env.MVN_DEPLOY_FLAGS}} -Durl=https://oss.sonatype.org/content/repositories/snapshots -DrepositoryId=ossrh -Dgpg.passphrase=${{env.GPG_PASSPHRASE}}"
57+
MVN_DEPLOY_FILE_FLAGS: "${{env.MVN_BUILD_FLAGS}} ${{env.MVN_DEPLOY_FLAGS}} -Durl=https://oss.sonatype.org/content/repositories/snapshots -DrepositoryId=ossrh"
7458

7559
build:
7660
needs: setup
7761
runs-on: ubuntu-latest # Not resolved - Maven image required
7862

7963
steps:
64+
- uses: actions/checkout@v4
8065
- name: Build Release CI
81-
if: "contains(github.ref, 'master')"
82-
run: |
83-
echo "MVN_DEPLOY_FILE_FLAGS: ${{needs.setup.outputs.RELEASE_MVN_DEPLOY_FILE_FLAGS}}"
84-
echo "RELEASE_NAME: ${{needs.setup.outputs.RELEASE_NAME}}"
66+
if: startsWith(github.event.ref, 'refs/tags')
67+
uses: ./.github/actions/build-migration
68+
with:
69+
build-command: install
70+
release-name: ${{needs.setup.outputs.RELEASE_NAME}}
71+
build-flags: ${{needs.setup.outputs.MVN_BUILD_FLAGS}}
72+
build-profiles: ${{needs.setup.outputs.RELEASE_MVN_DEPLOY_FILE_FLAGS}}
73+
maven-settings: $GITHUB_WORKSPACE/settings.xml
74+
env:
75+
GPG_KEYNAME: ${{secrets.GPG_KEYNAME}}
76+
GPG_PRIVATE_KEY: ${{secrets.GPG_PRIVATE_KEY}}
77+
GPG_PASSPHRASE: ${{secrets.GPG_PASSPHRASE}}
78+
CI_DEPLOY_USERNAME: ${{secrets.CI_DEPLOY_USERNAME}}
79+
CI_DEPLOY_PASSWORD: ${{secrets.CI_DEPLOY_PASSWORD}}
8580

8681
- name: Build Snapshot CI
87-
if: "contains(github.ref, 'develop')"
88-
run: |
89-
echo "MVN_DEPLOY_FILE_FLAGS: ${{needs.setup.outputs.SNAPSHOT_MVN_DEPLOY_FILE_FLAGS}}"
90-
echo "RELEASE_NAME: ${{needs.setup.outputs.SNAPSHOT_NAME}}"
82+
if: github.ref == 'refs/heads/develop' && github.event.pull_request.merged == true
83+
uses: ./.github/actions/build-migration
84+
with:
85+
build-command: verify
86+
release-name: ${{needs.setup.outputs.SNAPSHOT_NAME}}
87+
build-flags: ${{needs.setup.outputs.MVN_BUILD_FLAGS}}
88+
build-profiles: ${{needs.setup.outputs.SNAPSHOT_MVN_DEPLOY_FILE_FLAGS}}
89+
maven-settings: $GITHUB_WORKSPACE/settings.xml
90+
env:
91+
GPG_KEYNAME: ${{secrets.GPG_KEYNAME}}
92+
GPG_PRIVATE_KEY: ${{secrets.GPG_PRIVATE_KEY}}
93+
GPG_PASSPHRASE: ${{secrets.GPG_PASSPHRASE}}
94+
CI_DEPLOY_USERNAME: ${{secrets.CI_DEPLOY_USERNAME}}
95+
CI_DEPLOY_PASSWORD: ${{secrets.CI_DEPLOY_PASSWORD}}
9196

9297
distribute:
9398
needs: build
@@ -97,7 +102,7 @@ jobs:
97102
# Steps for distribution if needed
98103
- name: Distribute CI
99104
run:
100-
echo "Testing distribute ci"
105+
echo "Distribute ci"
101106

102107
finalise:
103108
needs: distribute
@@ -107,4 +112,4 @@ jobs:
107112
# Steps for finalizing the process if needed
108113
- name: Finalize CI
109114
run:
110-
echo "Testing finalize ci"
115+
echo "Finalize ci"

0 commit comments

Comments
 (0)