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.semver service.project service.api
-
Install docker and docker-compose
-
Clone sources
git clone https://github.com/itcreator/release-manager-micro.git .
- Run release manager
ops/scripts/start.sh
#waiting for the output: 2016/11/03 23:59:24 Serving release manager at http://[::]:80
- Create new project
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/{uuid}/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"}
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 asgit tag
or addocker 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/{uuid}/version/semantic -d '{"major":1, "minor": 3, "branch": "release"}'
curl -i http://127.0.0.1:9090/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/{uuid}
curl -iX PUT -H "Content-Type: application/release-manager.v1+json" http://127.0.0.1:9090/projects/{uuid} -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
docker-compose exec service.project bash
#server
go run main.go
protoc --go_out=plugins=micro:. proto/**/*.proto
docker-compose run --rm protoc protoc --go_out=plugins=micro:./src/project proto/project/*.proto
docker-compose run --rm go_swagger generate server -f /apiDoc/api_doc.yml
docker-compose run --rm go_swagger generate client -f /apiDoc/api_doc.yml
docker-compose run --rm go_swagger serve --no-open --port=8070 /apiDoc/api_doc.yml
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]
docker-compose exec service.project.db psql -U releasemanager -d release_manager
go test -mod=vendor handler/* --cover
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
Implement build scripts
Configure environment for CI and production
Implement UI (Angular 2)
Dashboard for micro services
Add OpenID Connect
Implement ACL
folder/repo structure
- extend (inheritance)