Skip to content

Commit 27bdf95

Browse files
committed
feat(go-sdk): automated release workflow
1 parent 1f0b0c4 commit 27bdf95

1 file changed

Lines changed: 177 additions & 0 deletions

File tree

.github/workflows/go-release.yaml

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
name: go-release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
om-branch:
7+
description: "OpenMetadata branch to build against (e.g. 1.6.2-release)"
8+
required: true
9+
type: string
10+
sdk-version:
11+
description: "SDK version to release — must be valid semver (e.g. 1.6.2)"
12+
required: true
13+
type: string
14+
15+
permissions:
16+
contents: write
17+
18+
jobs:
19+
release:
20+
runs-on: ubuntu-latest
21+
strategy:
22+
matrix:
23+
go-version: [1.24.x]
24+
steps:
25+
- name: Free Disk Space (Ubuntu)
26+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
27+
with:
28+
tool-cache: false
29+
android: true
30+
dotnet: true
31+
haskell: true
32+
large-packages: false
33+
swap-storage: true
34+
docker-images: false
35+
36+
- name: Validate sdk-version is semver
37+
env:
38+
SDK_VERSION: ${{ inputs.sdk-version }}
39+
run: |
40+
if ! echo "$SDK_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then
41+
echo "::error::sdk-version '$SDK_VERSION' is not valid semver"
42+
exit 1
43+
fi
44+
45+
- name: Validate om-branch format
46+
env:
47+
OM_BRANCH: ${{ inputs.om-branch }}
48+
run: |
49+
if ! echo "$OM_BRANCH" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+-release$'; then
50+
echo "::error::om-branch '$OM_BRANCH' does not match expected pattern (e.g. 1.6.2-release)"
51+
exit 1
52+
fi
53+
54+
- name: Checkout OpenMetadata
55+
uses: actions/checkout@v4
56+
with:
57+
repository: open-metadata/OpenMetadata
58+
ref: ${{ inputs.om-branch }}
59+
path: open-metadata
60+
61+
- name: Set up JDK 17
62+
uses: actions/setup-java@v3
63+
with:
64+
java-version: "17"
65+
distribution: "temurin"
66+
67+
- name: Set up Python 3.10.13
68+
uses: actions/setup-python@v4
69+
with:
70+
python-version: 3.10.13
71+
72+
- name: Install Ubuntu dependencies
73+
run: |
74+
sudo apt-get update && sudo apt-get install -y unixodbc-dev python3-venv librdkafka-dev gcc libsasl2-dev build-essential libssl-dev libffi-dev \
75+
unixodbc-dev libevent-dev python3-dev libkrb5-dev
76+
77+
- name: Generate OpenMetadata models
78+
run: |
79+
cd open-metadata
80+
python3 -m venv env
81+
source env/bin/activate
82+
sudo make install_antlr_cli
83+
make install_dev generate
84+
85+
- name: Install OpenMetadata dependencies
86+
run: |
87+
cd open-metadata
88+
source env/bin/activate
89+
make install_all install_test
90+
91+
- name: Start OpenMetadata Server
92+
env:
93+
INGESTION_DEPENDENCY: "mysql,elasticsearch"
94+
run: cd open-metadata && ./docker/run_local_docker.sh -m no-ui
95+
96+
- name: Checkout SDK
97+
uses: actions/checkout@v4
98+
with:
99+
path: openmetadata-sdk
100+
101+
- name: Setup Go ${{ matrix.go-version }}
102+
uses: actions/setup-go@v4
103+
with:
104+
go-version: ${{ matrix.go-version }}
105+
106+
- name: Generate Go models from OpenAPI spec
107+
run: |
108+
cd openmetadata-sdk/openmetadata-go-client && go tool oapi-codegen \
109+
-generate types \
110+
-package ometa \
111+
-o pkg/ometa/models.go \
112+
${{ github.workspace }}/open-metadata/openmetadata-service/target/classes/assets/swagger.json
113+
114+
- name: Run golangci-lint
115+
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
116+
with:
117+
version: v2.9.0
118+
working-directory: openmetadata-sdk/openmetadata-go-client
119+
120+
- name: Validate service coverage against swagger
121+
run: |
122+
cd openmetadata-sdk/openmetadata-go-client && go test ./pkg/ometa/ \
123+
-run TestServiceCoverage \
124+
-swagger-path ${{ github.workspace }}/open-metadata/openmetadata-service/target/classes/assets/swagger.json \
125+
-v
126+
127+
- name: Run unit tests
128+
run: |
129+
cd openmetadata-sdk/openmetadata-go-client && go test ./pkg/ometa/ -v
130+
131+
- name: Run integration tests
132+
env:
133+
OM_TEST_TOKEN: ${{ secrets.OM_TEST_TOKEN }}
134+
run: |
135+
cd openmetadata-sdk/openmetadata-go-client && go test ./tests/integration/ -v
136+
137+
- name: Commit generated models
138+
env:
139+
SDK_VERSION: ${{ inputs.sdk-version }}
140+
REF_NAME: ${{ github.ref_name }}
141+
run: |
142+
cd openmetadata-sdk
143+
git config user.name "github-actions[bot]"
144+
git config user.email "github-actions[bot]@users.noreply.github.com"
145+
git add openmetadata-go-client/pkg/ometa/models.go
146+
git commit -m "chore(go-sdk): generate models for v${SDK_VERSION}"
147+
git push origin "HEAD:${REF_NAME}"
148+
149+
- name: Create and push tag
150+
env:
151+
SDK_VERSION: ${{ inputs.sdk-version }}
152+
run: |
153+
cd openmetadata-sdk
154+
git tag "openmetadata-go-client/v${SDK_VERSION}"
155+
git push origin "openmetadata-go-client/v${SDK_VERSION}"
156+
157+
- name: Create GitHub Release
158+
env:
159+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
160+
SDK_VERSION: ${{ inputs.sdk-version }}
161+
OM_BRANCH: ${{ inputs.om-branch }}
162+
run: |
163+
cd openmetadata-sdk
164+
gh release create "openmetadata-go-client/v${SDK_VERSION}" \
165+
--title "Go SDK v${SDK_VERSION}" \
166+
--notes "$(cat <<EOF
167+
## Go SDK v${SDK_VERSION}
168+
169+
Built against [OpenMetadata ${OM_BRANCH}](https://github.com/open-metadata/OpenMetadata/tree/${OM_BRANCH}).
170+
171+
### Install
172+
173+
\`\`\`bash
174+
go get github.com/open-metadata/openmetadata-sdk/openmetadata-go-client@v${SDK_VERSION}
175+
\`\`\`
176+
EOF
177+
)"

0 commit comments

Comments
 (0)