Skip to content

Commit ef1a52e

Browse files
authored
Replace Bamboo SCDF samples build w/ GitHub actions (spring-cloud#159)
Add GitHub actions based CI pipeline Resolves spring-cloud#155
1 parent 547f870 commit ef1a52e

File tree

11 files changed

+506
-96
lines changed

11 files changed

+506
-96
lines changed

Diff for: .github/actions/build-sample-app/action.yml

+76
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: 'Build Sample App'
2+
description: 'Builds a sample app and optionally publishes to Artifactory and pushes to a Docker registry'
3+
inputs:
4+
app-dir:
5+
description: 'relative path to the app directory'
6+
required: true
7+
mvn-build-commands:
8+
description: 'commands passed to \"mvnw" to build the app'
9+
required: false
10+
default: '-B clean verify'
11+
artifactory-publish:
12+
description: 'whether or not to publish to artifactory'
13+
required: false
14+
default: 'false'
15+
jf-artifactory-spring:
16+
description: 'encoded JFrog server id configuration'
17+
required: false
18+
jf-mvn-build-commands:
19+
description: 'commands passed to \"jfrog rt mvn\" to publish the app'
20+
required: false
21+
default: '-B clean install -DskipTests'
22+
docker-push:
23+
description: 'whether or not to push docker image to docker hub'
24+
required: false
25+
default: 'false'
26+
docker-registry:
27+
description: 'docker registry'
28+
required: false
29+
docker-username:
30+
description: 'docker username'
31+
required: false
32+
docker-password:
33+
description: 'docker password'
34+
required: false
35+
docker-images:
36+
description: 'csv of docker images to push'
37+
required: false
38+
docker-images-override:
39+
description: 'csv of docker image tags to use when pushing (parallel array to docker-images)'
40+
required: false
41+
runs:
42+
using: "composite"
43+
steps:
44+
- uses: actions/checkout@v2
45+
46+
- uses: jvalkeal/setup-maven@v1
47+
with:
48+
maven-version: 3.8.4
49+
50+
- uses: actions/setup-java@v2
51+
with:
52+
distribution: adopt
53+
java-version: 8
54+
cache: maven
55+
56+
- name: Maven build
57+
shell: bash
58+
run: ./mvnw ${{ inputs.mvn-build-commands }}
59+
working-directory: ${{ inputs.app-dir }}
60+
61+
- uses: ./.github/actions/build-sample-app/artifactory-publish
62+
if: ${{ inputs.artifactory-publish == 'true' }}
63+
with:
64+
app-dir: ${{ inputs.app-dir }}
65+
jf-artifactory-spring: ${{ inputs.jf-artifactory-spring }}
66+
jf-mvn-build-commands: ${{ inputs.jf-mvn-build-commands }}
67+
68+
- uses: ./.github/actions/build-sample-app/docker-push
69+
if: ${{ inputs.docker-push == 'true' }}
70+
with:
71+
app-dir: ${{ inputs.app-dir }}
72+
docker-registry: ${{ inputs.docker-registry }}
73+
docker-username: ${{ inputs.docker-username }}
74+
docker-password: ${{ inputs.docker-password }}
75+
docker-images: ${{ inputs.docker-images }}
76+
docker-images-override: ${{ inputs.docker-images-override }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: 'Sample App Publish'
2+
description: 'Publishes a sample app to Artifactory'
3+
inputs:
4+
app-dir:
5+
description: 'relative path to the app directory'
6+
required: true
7+
jf-artifactory-spring:
8+
description: 'encoded JFrog server id configuration'
9+
required: true
10+
jf-mvn-build-commands:
11+
description: 'commands passed to \"jfrog rt mvn\" to publish the app'
12+
required: false
13+
default: '-B clean install -DskipTests'
14+
runs:
15+
using: "composite"
16+
steps:
17+
18+
- name: Setup JFrog CLI
19+
uses: jfrog/setup-jfrog-cli@v1
20+
with:
21+
version: 1.46.4
22+
env:
23+
JF_ARTIFACTORY_SPRING: ${{ inputs.jf-artifactory-spring }}
24+
25+
- name: Configure JFrog Cli
26+
shell: bash
27+
run: |
28+
jfrog rt mvnc \
29+
--server-id-resolve=repo.spring.io \
30+
--server-id-deploy=repo.spring.io \
31+
--repo-resolve-releases=libs-milestone \
32+
--repo-resolve-snapshots=libs-snapshot \
33+
--repo-deploy-releases=release \
34+
--repo-deploy-snapshots=snapshot
35+
echo JFROG_CLI_BUILD_NAME=spring-cloud-dataflow-samples >> $GITHUB_ENV
36+
echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV
37+
working-directory: ${{ inputs.app-dir }}
38+
39+
- name: Publish to Artifactory
40+
shell: bash
41+
run: |
42+
jfrog rt mvn ${{ inputs.jf-mvn-build-commands }}
43+
jfrog rt build-publish
44+
working-directory: ${{ inputs.app-dir }}
45+
+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
name: 'Sample App Push'
2+
description: 'Pushes a containerized sample app to Docker'
3+
inputs:
4+
app-dir:
5+
description: 'relative path to the app directory'
6+
required: true
7+
docker-registry:
8+
description: 'docker registry'
9+
required: false
10+
docker-username:
11+
description: 'docker username'
12+
required: true
13+
docker-password:
14+
description: 'docker password'
15+
required: true
16+
docker-images:
17+
description: 'csv of docker images to push'
18+
required: true
19+
docker-images-override:
20+
description: 'csv of docker image tags to use when pushing (parallel array to docker-images)'
21+
required: false
22+
runs:
23+
using: "composite"
24+
steps:
25+
26+
- name: Login Dockerhub
27+
uses: docker/login-action@v1
28+
with:
29+
registry: ${{ inputs.docker-registry }}
30+
username: ${{ inputs.docker-username }}
31+
password: ${{ inputs.docker-password }}
32+
33+
- name: Push images to Dockerhub
34+
env:
35+
DOCKER_REGISTRY: ${{ inputs.docker-registry }}
36+
DOCKER_IMAGES: ${{ inputs.docker-images }}
37+
DOCKER_IMAGES_OVERRIDE: ${{ inputs.docker-images-override }}
38+
working-directory: ${{ inputs.app-dir }}
39+
shell: bash
40+
run: |
41+
# read the images into arrays
42+
read -r -a images <<< "$DOCKER_IMAGES"
43+
read -r -a imagesOverride <<< "$DOCKER_IMAGES_OVERRIDE"
44+
45+
# validate lengths if override specified
46+
numImages=${#images[@]}
47+
numImagesOverride=${#imagesOverride[@]}
48+
if [[ $numImagesOverride -gt 0 && $numImages -ne $numImagesOverride ]]; then
49+
echo "when 'docker-images-override' is specified it must be the same length as 'docker-images'"
50+
exit 1
51+
fi
52+
# determine the target images name based on registry and override
53+
for idx in "${!images[@]}"
54+
do
55+
# use override if specified
56+
if [[ $numImagesOverride -gt 0 ]]; then
57+
image="${imagesOverride[idx]}"
58+
else
59+
image="${images[idx]}"
60+
fi
61+
# pre-pend registry if specified
62+
if [[ "$DOCKER_REGISTRY" != "" ]]; then
63+
image="$DOCKER_REGISTRY/$image"
64+
fi
65+
66+
# tag the original image if it has changed (override and/or registry)
67+
originalImage="${images[idx]}"
68+
if [[ "$image" != "$originalImage" ]]; then
69+
docker tag ${originalImage} ${image}
70+
fi
71+
docker push ${image}
72+
73+
done

Diff for: .github/workflows/ci-pr.yml

+8-15
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,11 @@ on:
55

66
jobs:
77
build:
8-
runs-on: ubuntu-latest
9-
name: CI PR Build
10-
steps:
11-
- uses: actions/checkout@v2
12-
- uses: actions/setup-java@v2
13-
with:
14-
distribution: adopt
15-
java-version: 8
16-
cache: maven
17-
- name: Build kafka-samples
18-
run: ./mvnw -B package
19-
working-directory: kafka-samples
20-
- name: Build multio-samples/ticktock
21-
run: ./mvnw -B package
22-
working-directory: multio-samples/ticktock
8+
name: Call Build Workflow
9+
uses: spring-cloud/spring-cloud-dataflow-samples/.github/workflows/ci.yml@main
10+
with:
11+
maven-build-only: true
12+
secrets:
13+
JF_ARTIFACTORY_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }}
14+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
15+
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}

Diff for: .github/workflows/ci-publish.yml

-41
This file was deleted.

0 commit comments

Comments
 (0)