@@ -2,35 +2,191 @@ name: Main
22
33on :
44 schedule :
5- - cron : ' 0 4 * * 1,2,3,4 ,5'
5+ - cron : ' 0 4 * * 1,3 ,5'
66 push :
77 branches :
88 - master
9- - main
10- - releases/*
119 tags :
1210 - v*
1311
1412 pull_request :
1513 branches :
1614 - master
17- - main
18- - releases/*
1915
2016 workflow_dispatch :
2117 inputs :
2218 skip-test :
2319 description : ' Skip test'
24- type : choice
25- required : true
26- default : ' false'
27- options :
28- - " true"
29- - " false"
20+ required : false
21+ type : string
22+ default : " false"
3023
3124jobs :
3225 check :
33- uses : kestra-io/actions/.github/workflows/plugins.yml@main
34- with :
35- skip-test : ${{ github.event.inputs.skip-test == 'true' }}
36- secrets : inherit
26+ name : Check & Publish
27+ runs-on : ubuntu-latest
28+ env :
29+ SLACK_WEBHOOK_URL : ${{ secrets.SLACK_WEBHOOK_URL }}
30+ GOOGLE_SERVICE_ACCOUNT : ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}
31+ steps :
32+ - uses : actions/checkout@v4
33+
34+ # Caches
35+ - name : Gradle cache
36+ uses : actions/cache@v4
37+ with :
38+ path : |
39+ ~/.gradle/caches
40+ ~/.gradle/wrapper
41+ key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle*.properties') }}
42+ restore-keys : |
43+ ${{ runner.os }}-gradle-
44+
45+ # JDK
46+ - name : Set up JDK
47+ uses : actions/setup-java@v4
48+ with :
49+ distribution : ' temurin'
50+ java-version : 21
51+
52+ - name : Validate Gradle wrapper
53+ uses : gradle/actions/wrapper-validation@v4
54+
55+ # Services
56+ - name : Build the docker-compose stack
57+ if : ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
58+ run : |
59+ # mkdir certs
60+ # openssl req -new -x509 -days 365 -nodes -out certs/ca.crt -keyout certs/ca.key -subj "/CN=root-ca"
61+
62+ # mkdir certs/server
63+ # openssl genrsa -des3 -out certs/server/server.key -passout pass:p4ssphrase 2048
64+ # openssl rsa -in certs/server/server.key -passin pass:p4ssphrase -out certs/server/server.key
65+ # openssl req -new -nodes -key certs/server/server.key -out certs/server/server.csr -subj "/CN=postgresql"
66+ # openssl x509 -req -in certs/server/server.csr -days 365 -CA certs/ca.crt -CAkey certs/ca.key -CAcreateserial -out certs/server/server.crt
67+ # sudo chmod -R 600 certs/server/
68+ # sudo chown -R 1001 certs/server/
69+
70+ # mkdir certs/client
71+ # openssl genrsa -des3 -out certs/client/client.key -passout pass:p4ssphrase 2048
72+ # openssl rsa -in certs/client/client.key -passin pass:p4ssphrase -out certs/client/client-no-pass.key
73+ # openssl req -new -nodes -key certs/client/client.key -passin pass:p4ssphrase -out certs/client/client.csr -subj "/CN=postgres"
74+ # openssl x509 -req -in certs/client/client.csr -days 365 -CA certs/ca.crt -CAkey certs/ca.key -CAcreateserial -out certs/client/client.crt
75+
76+ # mkdir plugin-debezium-postgres/src/test/resources/ssl/
77+ # cp certs/client/* plugin-debezium-postgres/src/test/resources/ssl/
78+ # cp certs/ca.crt plugin-debezium-postgres/src/test/resources/ssl/
79+
80+ docker compose -f docker-compose-ci.yml up -d mysql
81+ docker compose -f docker-compose-ci.yml up -d
82+ sleep 10
83+ docker compose -f docker-compose-ci.yml exec mysql sh -c "mysql -u root -pmysql_passwd < /tmp/docker/mysql.sql"
84+ docker compose -f docker-compose-ci.yml exec postgres sh -c "export PGPASSWORD=pg_passwd && psql -d postgres -U postgres -f /tmp/docker/postgres.sql > /dev/null"
85+ docker run -v ${PWD}/data:/tmp/docker --network=plugin-debezium_default mcr.microsoft.com/mssql-tools sh -c "/opt/mssql-tools/bin/sqlcmd -S sqlserver -U sa -P Sqls3rv3r_Pa55word! -i /tmp/docker/sqlserver.sql"
86+
87+ # Gradle check
88+ - name : Build with Gradle
89+ if : ${{ github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '' }}
90+ run : ./gradlew check --refresh-dependencies
91+
92+ # Allure check
93+ - name : Auth to Google Cloud
94+ id : auth
95+ if : ${{ always() && env.GOOGLE_SERVICE_ACCOUNT != 0 }}
96+ uses : ' google-github-actions/auth@v2'
97+ with :
98+ credentials_json : ' ${{ secrets.GOOGLE_SERVICE_ACCOUNT }}'
99+
100+ - uses : rlespinasse/github-slug-action@v5
101+
102+ - name : Publish allure report
103+ uses : andrcuns/allure-publish-action@v2.9.0
104+ if : ${{ always() && env.GOOGLE_SERVICE_ACCOUNT != 0 && (github.event.inputs.skip-test == 'false' || github.event.inputs.skip-test == '') }}
105+ env :
106+ GITHUB_AUTH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
107+ JAVA_HOME : /usr/lib/jvm/default-jvm/
108+ with :
109+ storageType : gcs
110+ resultsGlob : " **/build/allure-results"
111+ bucket : internal-kestra-host
112+ baseUrl : " https://internal.dev.kestra.io"
113+ prefix : ${{ format('{0}/{1}', github.repository, 'allure/java') }}
114+ copyLatest : true
115+ ignoreMissingResults : true
116+
117+ # Jacoco
118+ - name : ' Set up Cloud SDK'
119+ if : ${{ env.GOOGLE_SERVICE_ACCOUNT != 0 }}
120+ uses : ' google-github-actions/setup-gcloud@v2'
121+
122+ - name : ' Copy jacoco files'
123+ if : ${{ env.GOOGLE_SERVICE_ACCOUNT != 0 }}
124+ run : |
125+ mv build/reports/jacoco/testCodeCoverageReport build/reports/jacoco/test/
126+ mv build/reports/jacoco/test/testCodeCoverageReport.xml build/reports/jacoco/test/jacocoTestReport.xml
127+ gsutil -m rsync -d -r build/reports/jacoco/test/ gs://internal-kestra-host/${{ format('{0}/{1}', github.repository, 'jacoco') }}
128+
129+ # Publish
130+ - name : Publish package to Sonatype
131+ if : github.ref == 'refs/heads/master'
132+ env :
133+ ORG_GRADLE_PROJECT_sonatypeUsername : ${{ secrets.SONATYPE_USER }}
134+ ORG_GRADLE_PROJECT_sonatypePassword : ${{ secrets.SONATYPE_PASSWORD }}
135+ SONATYPE_GPG_KEYID : ${{ secrets.SONATYPE_GPG_KEYID }}
136+ SONATYPE_GPG_PASSWORD : ${{ secrets.SONATYPE_GPG_PASSWORD }}
137+ SONATYPE_GPG_FILE : ${{ secrets.SONATYPE_GPG_FILE }}
138+ run : |
139+ echo "signing.keyId=${SONATYPE_GPG_KEYID}" > ~/.gradle/gradle.properties
140+ echo "signing.password=${SONATYPE_GPG_PASSWORD}" >> ~/.gradle/gradle.properties
141+ echo "signing.secretKeyRingFile=${HOME}/.gradle/secring.gpg" >> ~/.gradle/gradle.properties
142+ echo ${SONATYPE_GPG_FILE} | base64 -d > ~/.gradle/secring.gpg
143+ ./gradlew publishToSonatype
144+
145+ # Release
146+ - name : Release package to Maven Central
147+ if : startsWith(github.ref, 'refs/tags/v')
148+ env :
149+ ORG_GRADLE_PROJECT_sonatypeUsername : ${{ secrets.SONATYPE_USER }}
150+ ORG_GRADLE_PROJECT_sonatypePassword : ${{ secrets.SONATYPE_PASSWORD }}
151+ SONATYPE_GPG_KEYID : ${{ secrets.SONATYPE_GPG_KEYID }}
152+ SONATYPE_GPG_PASSWORD : ${{ secrets.SONATYPE_GPG_PASSWORD }}
153+ SONATYPE_GPG_FILE : ${{ secrets.SONATYPE_GPG_FILE }}
154+ run : |
155+ echo "signing.keyId=${SONATYPE_GPG_KEYID}" > ~/.gradle/gradle.properties
156+ echo "signing.password=${SONATYPE_GPG_PASSWORD}" >> ~/.gradle/gradle.properties
157+ echo "signing.secretKeyRingFile=${HOME}/.gradle/secring.gpg" >> ~/.gradle/gradle.properties
158+ echo ${SONATYPE_GPG_FILE} | base64 -d > ~/.gradle/secring.gpg
159+ ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
160+
161+ # GitHub Release
162+ - name : Create GitHub release
163+ uses : " marvinpinto/action-automatic-releases@latest"
164+ if : startsWith(github.ref, 'refs/tags/v')
165+ with :
166+ repo_token : " ${{ secrets.GITHUB_TOKEN }}"
167+ prerelease : false
168+ files : |
169+ build/libs/*.jar
170+
171+ # Slack
172+ - name : Slack notification
173+ uses : 8398a7/action-slack@v3
174+ if : ${{ always() && env.SLACK_WEBHOOK_URL != 0 }}
175+ with :
176+ status : ${{ job.status }}
177+ job_name : Check & Publish
178+ fields : repo,message,commit,author,action,eventName,ref,workflow,job,took
179+ username : Github Actions
180+ icon_emoji : ' :github-actions:'
181+ channel : ' C02DQ1A7JLR'
182+ env :
183+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
184+ SLACK_WEBHOOK_URL : ${{ secrets.SLACK_WEBHOOK_URL }}
185+
186+ - name : Notify failed CI
187+ id : send-ci-failed
188+ if : always() && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') && job.status != 'success'
189+ uses : kestra-io/actions/.github/actions/send-ci-failed@main
190+ env :
191+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
192+ SLACK_WEBHOOK_URL : ${{ secrets.SLACK_WEBHOOK_URL }}
0 commit comments