Release manager (development version)
This application generate version for your software (based on semver and gitflow).
Input: project id
, major version
, minor version
, branch name
Output: semantic version http://semver.org/ (look like as v1.2.0-rc.7
)
NOTICE: something does not work? Just remove all containers with consul agents
docker-compose rm -vf consul service.version.incremental service.semver service.project service.api
Changelog
Quick start (how to run and use)
git clone https://github.com/itcreator/release-manager-micro.git .
ops/scripts/start.sh #or start_semver.sh or start_incremental.sh
#waiting for the output: 2016/11/03 23:59:24 Serving release manager at http://[::]:80
curl -iX POST -H "Content-Type: application/release-manager.v1+json" http://127.0.0.1/projects -d '{"name":"MyProject", "description":"demo project"}'
Response:
HTTP/1.1 201 Created
Content-Type: application/release-manager.v1+json
X-Error-Code:
Date: Fri, 04 Nov 2016 00:08:17 GMT
Content-Length: 58
{"description":"demo project","id":34,"name":"MyProject"}
- Generate semantic version
curl -iX POST -H "Content-Type: application/release-manager.v1+json" http://127.0.0.1/projects/1/version/semantic -d '{"major":1, "minor": 2, "branch": "release"}'
Response:
HTTP/1.1 201 Created
Content-Type: application/release-manager.v1+json
Date: Fri, 04 Nov 2016 00:09:53 GMT
Content-Length: 24
{"version":"v1.2.0-rc"}
- Generate incremental version
curl -iX POST -H "Content-Type: application/release-manager.v1+json" http://127.0.0.1/increamental_version/test
Response:
HTTP/1.1 201 Created
Content-Type: application/release-manager.v1+json
Date: Fri, 09 Dec 2016 12:15:24 GMT
Content-Length: 14
{"version":1}
- Use version number
v1.2.0-rc
(for example as git tag
or ad docker image tag
API Documentation apiDoc/api_doc.yml
docker-compose up
docker-compose exec service.api bash
go run cmd/release-manager-server/main.go --host=0.0.0.0 --port=80
curl -iX POST -H "Content-Type: application/release-manager.v1+json" http://127.0.0.1:9090/projects/1/version/semantic -d '{"major":1, "minor": 3, "branch": "release"}'
curl -i http://127.0.0.1:9/projects
curl -iX POST -H "Content-Type: application/release-manager.v1+json" http://127.0.0.1:9090/projects -d '{"name":"MyProject", "description":"demo project"}'
curl -i http://127.0.0.1:9090/projects/5
curl -iX PUT -H "Content-Type: application/release-manager.v1+json" http://127.0.0.1:9090/projects/5 -d '{"name":"Project 5!", "description":"demo project 5"}'
Shortcuts
export PATH=./ops/shortcuts:$PATH
go-project go run cmd/service/main.go
go-api go run cmd/release-manager-server/main.go --host=0.0.0.0 --port=80
Add new agent: go to ops/consul/scripts/boot.sh
and add line consul join service.***
Add new agent manually:
docker-compose exec consul consul join service.api
Check consul cluster
docker-compose exec consul consul members
Project service
docker-compose exec service.project bash
#server
go run main.go
Protobuf
docker-compose exec service.project bash -c "protoc --go_out=plugins=micro:. proto/**/*.proto"
# or
protoc --go_out=plugins=micro:. proto/**/*.proto
docker-compose run --rm protoc protoc --go_out=plugins=micro:src/semver proto/semver/*.proto
Swagger
docker-compose run --rm go_swagger generate server -f /apiDoc/api_doc.yml
Serve API documentation
docker-compose run --rm go_swagger serve --no-open --port=8070 /apiDoc/api_doyml
And open [http://127.0.0.1:8070/docs]
Or
docker-compose run --rm go_swagger serve --no-open --port=8070 --flavor=swagger /apiDoc/api_doc.yml
And open [http://petstore.swagger.io/?url=http%3A%2F%2Flocalhost%3A8070%2Fswagger.json]
DB
docker-compose exec service.project.db psql -U releasemanager -d release_manager
Tests
go test $(glide novendor) --cover
Docker containers ip
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
###TODO:
+project - implement CRUD
+Consul health check
+go-swagger - return correct response and error messages
+implement versioning
+use gorp
Implement build scripts
Configure environment for CI and production
Implement UI (Angular 2)
add OpenID Connect
Implement ACL
folder/repo structure
dashboard for micro services
Proto
- extend (inheritance)