-
Notifications
You must be signed in to change notification settings - Fork 1
102 lines (89 loc) · 4.1 KB
/
deploy-dataflow-template.yml
File metadata and controls
102 lines (89 loc) · 4.1 KB
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
# This new ci upload dataflow templates in both dev and prod environment
# also it deploy all main functions (for Streaming and Batch)
# thus your main class should be called Main if alone, and Batch/Streaming if multiple
name: Deploy Dataflow Template
on:
workflow_call:
inputs:
module_name:
required: true
type: string
job_name:
required: true
type: string
java_version:
type: string
default: 17
secrets:
gcp_publisher_service_account_key_prod:
required: true
gcp_publisher_service_account_key_dev:
required: true
gh_packages_read_access_token:
required: true
gh_deployment_creation_access_token:
required: true
extra_gradle_parameters:
required: false
env:
job_location: ${{ inputs.module_name }}-jobs
global_job_name: ${{ inputs.module_name }}-jobs-${{ inputs.job_name }}
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up cache
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle/**') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: ${{ inputs.java_version }}
distribution: 'temurin'
- id: get_version_env
name: Get job version and deployment env
run: |
ENV=$([ '${{ github.ref }}' == 'refs/heads/master' ] && echo 'dev' || echo 'prod' )
VERSION=$([ $ENV == 'dev' ] && git rev-parse --short HEAD || ./gradlew --quiet --console=plain -Prelease.quiet -Pgpr.read.user=${{ inputs.module_name }} -Pgpr.read.key=${{ secrets.gh_packages_read_access_token }} ${{ env.job_location }}:${{ env.global_job_name }}:currentVersion | tail -n1 )
echo "env=$ENV" >> $GITHUB_OUTPUT
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "bucket_prefix=$([ $ENV == 'dev' ] && echo 'xo-dev' || echo 'xo')" >> $GITHUB_OUTPUT
echo "google_credentials=$([ $ENV == 'prod' ] && echo ${{ secrets.gcp_publisher_service_account_key_prod }} || echo ${{ secrets.gcp_publisher_service_account_key_dev }})" >> $GITHUB_OUTPUT
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ steps.get_version_env.outputs.google_credentials }}
create_credentials_file: true
export_environment_variables: true
- name: Publish Dataflow Template
run: |
GCS_PREFIX="gs://${{ steps.get_version_env.outputs.bucket_prefix }}-dataflow/jobs/${{ env.global_job_name }}/${{ steps.get_version_env.outputs.version }}"
for MAIN_CLASS_FILE in $(grep -lrE "fun main\b" --include="*.kt" ${{ env.job_location }}/${{ env.global_job_name }}/src/main); do
MAIN_CLASS=$(basename $MAIN_CLASS_FILE)
MAIN_CLASS=${MAIN_CLASS%.*}
ARGS="--runner=DataflowRunner"
ARGS+=" --project=attraqt-${{ steps.get_version_env.outputs.bucket_prefix }}"
ARGS+=" --region=europe-west1"
ARGS+=" --stagingLocation=$GCS_PREFIX/staging"
ARGS+=" --tempLocation=$GCS_PREFIX/tmp"
ARGS+=" --templateLocation=$GCS_PREFIX/templates/${MAIN_CLASS,,}"
echo "ARGS: $ARGS"
./gradlew :${{ env.job_location }}:${{ env.global_job_name }}:run -Pmain=$MAIN_CLASS -Pgpr.read.user=${{ inputs.module_name }} -Pgpr.read.key=${{ secrets.gh_packages_read_access_token }} ${{ secrets.extra_gradle_parameters }} --args="$ARGS"
done
- name: Deploy
id: deploy
uses: Attraqt/github_actions/.github/actions/deploy@main
with:
repo: xo-terragrunt-${{ steps.get_version_env.outputs.env }}
ref: master
environment: ${{ steps.get_version_env.outputs.env }}
token: ${{ secrets.gh_deployment_creation_access_token }}
task: ${{ env.global_job_name }}:${{ steps.get_version_env.outputs.version }}
required_contexts: <<EMPTY>>