Skip to content

Commit

Permalink
cli tool to invoke generator for golang projects (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
gemyago authored Dec 1, 2024
1 parent da37ec3 commit d4f0232
Show file tree
Hide file tree
Showing 32 changed files with 1,794 additions and 148 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/push-test-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ on:

jobs:
push-test-artifacts:
if: github.event.pull_request.merged == true
if: |
github.event.pull_request.merged == true &&
!contains(github.event.pull_request.labels.*.name, 'no-build')
name: Publish Test Artifacts
runs-on: ubuntu-latest
permissions:
Expand Down
28 changes: 28 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Release

on:
pull_request:
types: [closed]
branches:
- main

jobs:
deploy-go-apigen-server:
permissions:
contents: write

name: Create Release
if: |
github.event.pull_request.merged == true &&
startsWith(github.event.pull_request.head.ref, 'release/') &&
!contains(github.event.pull_request.labels.*.name, 'no-build')
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Run deploy
run: make release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ on:

jobs:
build-and-test:
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-build') }}
name: Lint And Test
runs-on: ubuntu-latest
steps:
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ tmp
generators/*/target
*-test.log

tests/golang/.cover
.cover
1 change: 1 addition & 0 deletions .versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
APP_VERSION: 0.0.1
OPENAPI_GENERATOR_CLI: 7.6.0
MAVEN: 3.8.8
3 changes: 0 additions & 3 deletions .vscode/settings.json

This file was deleted.

79 changes: 64 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,18 @@ MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
.SUFFIXES:

UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S), Darwin)
sed_i := sed -i ''
else
sed_i := sed -i
endif

tmp=./tmp
bin=bin

app_version=$(shell sed -n -r 's/APP_VERSION: (.+)/\1/p' .versions)

cli_version=$(shell sed -n -r 's/OPENAPI_GENERATOR_CLI: (.+)/\1/p' .versions)
cli_url=https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/$(cli_version)/openapi-generator-cli-$(cli_version).jar
cli_jar=bin/openapi-generator-cli-$(cli_version).jar
Expand All @@ -19,10 +28,11 @@ maven_url=https://dlcdn.apache.org/maven/maven-3/$(maven_version)/binaries/$(mav
maven_archive=$(tmp)/$(maven_dir_name)-bin.tar.gz
mvn=$(bin)/apache-maven/bin/mvn

golang_tests_cover_dir=tests/golang/.cover
golang_tests_cover_profile=${golang_tests_cover_dir}/profile.out
golang_tests_cover_dir=.cover/golang
golang_tests_cover_html=${golang_tests_cover_dir}/coverage.html

golang_server_jar=generators/go-apigen-server/target/server.jar

$(bin):
mkdir -p $@

Expand Down Expand Up @@ -70,12 +80,16 @@ endef
%/.openapi-generator/REMOVED_FILES:
$(if $(strip $(openapi_generator_removed_files)),$(current_make) $(openapi_generator_removed_files), $(NOOP))

generators/go-apigen-server: $(shell find generators/go-apigen-server/src/main -type f)
mvn -f $@/pom.xml package
# Update pom.xml (version) with app_version
generators/go-apigen-server/pom.xml: .versions
mvn -B -q -f generators/go-apigen-server/pom.xml versions:set -DnewVersion=$(app_version)

$(golang_server_jar): $(shell find generators/go-apigen-server/src/main -type f) generators/go-apigen-server/pom.xml
mvn -B -q -f generators/go-apigen-server/pom.xml package
touch $@

examples/go-apigen-server/pkg/api/http/v1routes: generators/go-apigen-server examples/petstore.yaml
java -cp $(cli_jar):generators/go-apigen-server/target/go-apigen-server-openapi-generator-0.0.1.jar \
examples/go-apigen-server/pkg/api/http/v1routes: $(golang_server_jar) examples/petstore.yaml
java -cp $(cli_jar):$(golang_server_jar) \
org.openapitools.codegen.OpenAPIGenerator generate \
-g go-apigen-server \
-i examples/petstore.yaml \
Expand All @@ -86,9 +100,9 @@ examples/go-apigen-server/pkg/api/http/v1routes: generators/go-apigen-server exa
examples/go-apigen-server: examples/go-apigen-server/pkg/api/http/v1routes

# generatedCodeComment set to empty to allow linter to lint generated code.
tests/golang/routes: tests/openapi/openapi.yaml tests/openapi/*/*.yaml generators/go-apigen-server
tests/golang/routes: tests/openapi/openapi.yaml tests/openapi/*/*.yaml $(golang_server_jar)
mkdir -p $@
java -cp $(cli_jar):generators/go-apigen-server/target/go-apigen-server-openapi-generator-0.0.1.jar \
java -cp $(cli_jar):$(golang_server_jar) \
org.openapitools.codegen.OpenAPIGenerator generate \
-g go-apigen-server \
--additional-properties generatedCodeComment="" \
Expand Down Expand Up @@ -119,12 +133,34 @@ $(go-test-coverage):
$(golang_tests_cover_dir):
mkdir -p $(golang_tests_cover_dir)

.PHONY: tests/golang
tests/golang: $(golang_tests_cover_dir) $(go-test-coverage)
TZ=US/Alaska go test -shuffle=on -failfast -coverpkg=./tests/golang/... -coverprofile=$(golang_tests_cover_profile) -covermode=atomic ./tests/golang/...
go tool cover -html=$(golang_tests_cover_profile) -o $(golang_tests_cover_html)
@echo "Test coverage report: $(shell realpath $(golang_tests_cover_html))"
$(go-test-coverage) --badge-file-name $(golang_tests_cover_dir)/coverage.svg --config tests/golang/.testcoverage.yaml --profile $(golang_tests_cover_profile)
.PHONY: $(golang_tests_cover_dir)/generated-routes-profile.out
$(golang_tests_cover_dir)/generated-routes-profile.out: $(golang_tests_cover_dir) $(go-test-coverage)
@echo "Running generated routes tests"
TZ=US/Alaska go test -shuffle=on -failfast -coverpkg=./tests/golang/... -coverprofile=$(golang_tests_cover_dir)/generated-routes-profile.out -covermode=atomic ./tests/golang/...
go tool cover -html=$(golang_tests_cover_dir)/generated-routes-profile.out -o $(golang_tests_cover_dir)/generated-routes-profile.html
@echo "Generated routes test coverage report: $(shell realpath $(golang_tests_cover_dir)/generated-routes-profile.html)"
$(go-test-coverage) --config tests/golang/.testcoverage.yaml --profile $(golang_tests_cover_dir)/generated-routes-profile.out

.PHONY: $(golang_tests_cover_dir)/apigen-profile.out
$(golang_tests_cover_dir)/apigen-profile.out: $(golang_tests_cover_dir) $(go-test-coverage)
@echo "Running apigen cli tests"
TZ=US/Alaska go test -shuffle=on -failfast -coverpkg=./lang/go/apigen/... -coverprofile=$(golang_tests_cover_dir)/apigen-profile.out -covermode=atomic ./lang/go/apigen/...
go tool cover -html=$(golang_tests_cover_dir)/apigen-profile.out -o $(golang_tests_cover_dir)/apigen-profile.html
@echo "Coverage report of apigen cli: $(shell realpath $(golang_tests_cover_dir)/apigen-profile.html)"
$(go-test-coverage) --config lang/go/apigen/.testcoverage.yaml --profile $(golang_tests_cover_dir)/apigen-profile.out

$(golang_tests_cover_dir)/coverage.out:
@echo "Merging coverage profiles"
@echo "mode: atomic" > $@
@tail -n +2 $(golang_tests_cover_dir)/generated-routes-profile.out >> $@
@tail -n +2 $(golang_tests_cover_dir)/apigen-profile.out >> $@

$(golang_tests_cover_dir)/coverage.html: $(golang_tests_cover_dir)/coverage.out
@go tool cover -html=$< -o $@
@echo "Coverage report: $(shell realpath $@)"

$(golang_tests_cover_dir)/coverage.svg: $(golang_tests_cover_dir)/coverage.out
$(go-test-coverage) --badge-file-name $@ --profile $<

$(golang_tests_cover_dir)/coverage.%.blob-sha:
@gh api \
Expand Down Expand Up @@ -160,5 +196,18 @@ tests/golang/push-test-artifacts: $(golang_tests_cover_dir)/coverage.svg.gh-cli-
/repos/gemyago/apigen/contents/coverage/golang-coverage.html \
--input $(golang_tests_cover_dir)/coverage.html.gh-cli-body.json

.PHONY: tests/golang tests/golang-generated-routes tests/golang-apigen
tests/golang: $(golang_tests_cover_dir)/generated-routes-profile.out $(golang_tests_cover_dir)/apigen-profile.out
tests/golang-generated-routes: $(golang_tests_cover_dir)/generated-routes-profile.out
tests/golang-apigen: $(golang_tests_cover_dir)/apigen-profile.out

.PHONY: tests
tests: tests/golang
tests: tests/golang

.PHONY: release
release: $(golang_server_jar) $(tmp)
gh release create $(shell ./scripts/release.sh resolve-release-tag) \
--generate-notes \
--latest=false \
--draft \
$(golang_server_jar) > tmp/release-url.txt
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,15 @@ make generate/golang
Run tests
```
make tests
```
```

## Releasing

1. Create a release branch with the version number (e.g. `release/0.1.0`)
1. Update the version in the `pom.xml` of plugins that have changed and needs to be released.
1. Regenerate golang apigen cli command if golang generator plugin changed
```
cd lang/go/apigen && go generate ./... && cd -
```
1. Commit the changes and create the PR
1. TODO: Once the PR is merged, a release and tag will be created automatically by the CI
Loading

0 comments on commit d4f0232

Please sign in to comment.