go-release #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: go-release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| om-branch: | |
| description: "OpenMetadata branch to build against (e.g. 1.6.2-release)" | |
| required: true | |
| type: string | |
| sdk-version: | |
| description: "SDK version to release — must be valid semver (e.g. 1.6.2)" | |
| required: true | |
| type: string | |
| permissions: | |
| contents: write | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| go-version: [1.24.x] | |
| steps: | |
| - name: Free Disk Space (Ubuntu) | |
| uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 | |
| with: | |
| tool-cache: false | |
| android: true | |
| dotnet: true | |
| haskell: true | |
| large-packages: false | |
| swap-storage: true | |
| docker-images: false | |
| - name: Validate sdk-version is semver | |
| env: | |
| SDK_VERSION: ${{ inputs.sdk-version }} | |
| run: | | |
| if ! echo "$SDK_VERSION" | grep -qE '^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then | |
| echo "::error::sdk-version '$SDK_VERSION' is not valid semver" | |
| exit 1 | |
| fi | |
| - name: Validate om-branch format | |
| env: | |
| OM_BRANCH: ${{ inputs.om-branch }} | |
| run: | | |
| if ! echo "$OM_BRANCH" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then | |
| echo "::error::om-branch '$OM_BRANCH' does not match expected pattern (e.g. 1.6.2-release)" | |
| exit 1 | |
| fi | |
| - name: Checkout OpenMetadata | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: open-metadata/OpenMetadata | |
| ref: ${{ inputs.om-branch }} | |
| path: open-metadata | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v4 | |
| with: | |
| java-version: "21" | |
| distribution: "temurin" | |
| - name: Set up Python 3.11.14 | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: 3.11.14 | |
| - name: Install Ubuntu dependencies | |
| run: | | |
| sudo apt-get update && sudo apt-get install -y unixodbc-dev python3-venv librdkafka-dev gcc libsasl2-dev build-essential libssl-dev libffi-dev \ | |
| unixodbc-dev libevent-dev python3-dev libkrb5-dev | |
| - name: Generate OpenMetadata models | |
| run: | | |
| cd open-metadata | |
| python3 -m venv env | |
| source env/bin/activate | |
| sudo make install_antlr_cli | |
| make install_dev generate | |
| - name: Install OpenMetadata dependencies | |
| run: | | |
| cd open-metadata | |
| source env/bin/activate | |
| make install_all install_test | |
| - name: Start OpenMetadata Server | |
| env: | |
| INGESTION_DEPENDENCY: "mysql,elasticsearch" | |
| run: cd open-metadata && ./docker/run_local_docker.sh -m no-ui | |
| - name: Checkout SDK | |
| uses: actions/checkout@v4 | |
| with: | |
| path: openmetadata-sdk | |
| - name: Setup Go ${{ matrix.go-version }} | |
| uses: actions/setup-go@v4 | |
| with: | |
| go-version: ${{ matrix.go-version }} | |
| - name: Patch OpenAPI spec for Go codegen | |
| run: | | |
| cd openmetadata-sdk/openmetadata-go-client && go run scripts/patch_swagger.go \ | |
| ${{ github.workspace }}/open-metadata/openmetadata-service/target/classes/assets/swagger.json \ | |
| /tmp/swagger_patched.json | |
| - name: Generate Go models from OpenAPI spec | |
| run: | | |
| cd openmetadata-sdk/openmetadata-go-client && go tool oapi-codegen \ | |
| -generate types \ | |
| -package ometa \ | |
| -o pkg/ometa/models.go \ | |
| /tmp/swagger_patched.json | |
| - name: Run golangci-lint | |
| uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0 | |
| with: | |
| version: v2.9.0 | |
| working-directory: openmetadata-sdk/openmetadata-go-client | |
| - name: Validate service coverage against swagger | |
| run: | | |
| cd openmetadata-sdk/openmetadata-go-client && go test ./pkg/ometa/ \ | |
| -run TestServiceCoverage \ | |
| -swagger-path ${{ github.workspace }}/open-metadata/openmetadata-service/target/classes/assets/swagger.json \ | |
| -v | |
| - name: Run unit tests | |
| run: | | |
| cd openmetadata-sdk/openmetadata-go-client && go test ./pkg/ometa/ -v | |
| - name: Run integration tests | |
| env: | |
| OM_TEST_TOKEN: ${{ secrets.OM_TEST_TOKEN }} | |
| run: | | |
| cd openmetadata-sdk/openmetadata-go-client && go test ./tests/integration/ -v | |
| - name: Commit generated models and push release branch | |
| env: | |
| SDK_VERSION: ${{ inputs.sdk-version }} | |
| run: | | |
| cd openmetadata-sdk | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git checkout -b "go/v${SDK_VERSION}-release" | |
| git add -f openmetadata-go-client/pkg/ometa/models.go | |
| git commit -m "chore(go-sdk): generate models for v${SDK_VERSION}" | |
| git push origin "go/v${SDK_VERSION}-release" | |
| - name: Create and push tag | |
| env: | |
| SDK_VERSION: ${{ inputs.sdk-version }} | |
| run: | | |
| cd openmetadata-sdk | |
| git tag "openmetadata-go-client/v${SDK_VERSION}" | |
| git push origin "openmetadata-go-client/v${SDK_VERSION}" | |
| - name: Create GitHub Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| SDK_VERSION: ${{ inputs.sdk-version }} | |
| OM_BRANCH: ${{ inputs.om-branch }} | |
| run: | | |
| cd openmetadata-sdk | |
| gh release create "openmetadata-go-client/v${SDK_VERSION}" \ | |
| --title "Go SDK v${SDK_VERSION}" \ | |
| --notes "$(cat <<EOF | |
| ## Go SDK v${SDK_VERSION} | |
| Built against [OpenMetadata ${OM_BRANCH}](https://github.com/open-metadata/OpenMetadata/tree/${OM_BRANCH}). | |
| ### Install | |
| \`\`\`bash | |
| go get github.com/open-metadata/openmetadata-sdk/openmetadata-go-client@v${SDK_VERSION} | |
| \`\`\` | |
| EOF | |
| )" |