mirror of
https://github.com/semaphoreui/semaphore.git
synced 2024-12-03 14:51:05 +01:00
327 lines
9.9 KiB
YAML
327 lines
9.9 KiB
YAML
# Semaphore Tasks
|
|
# These tasks should be used to build and develop Semaphore
|
|
#
|
|
# Tasks without a `desc:` field are intended mainly to be called
|
|
# internally by other tasks and therefore are not listed when running `task` or `task -l`
|
|
version: '2'
|
|
|
|
vars:
|
|
docker_namespace: ansiblesemaphore
|
|
docker_image: semaphore
|
|
|
|
tasks:
|
|
all:
|
|
desc: Install, Compile, Test and Build Semaphore for local architecture
|
|
cmds:
|
|
- task: deps
|
|
- task: compile
|
|
- task: test
|
|
- task: build:local
|
|
|
|
deps:
|
|
desc: Install all dependencies (except dredd requirements)
|
|
cmds:
|
|
- task: deps:tools
|
|
- task: deps:be
|
|
- task: deps:fe
|
|
|
|
deps:be:
|
|
desc: Vendor application dependencies
|
|
cmds:
|
|
- dep ensure -vendor-only
|
|
|
|
deps:fe:
|
|
desc: Installs npm requirements for front end from package.json
|
|
dir: web
|
|
cmds:
|
|
- npm install
|
|
|
|
deps:integration:
|
|
desc: Installs requirements for integration testing with dredd
|
|
dir: web
|
|
cmds:
|
|
- npm install dredd@5.1.5
|
|
|
|
deps:tools:
|
|
desc: Installs tools needed
|
|
dir: web
|
|
vars:
|
|
GORELEASER_VERSION: "0.67.0"
|
|
cmds:
|
|
- go get -u github.com/golang/dep/cmd/dep
|
|
- go get github.com/cespare/reflex || true
|
|
- go get -u github.com/gobuffalo/packr/...
|
|
- go get -u github.com/haya14busa/goverage
|
|
- go get github.com/snikch/goodman/cmd/goodman
|
|
- '{{ if ne OS "windows" }} curl -L https://github.com/goreleaser/goreleaser/releases/download/v{{ .GORELEASER_VERSION }}/goreleaser_$(uname -s)_$(uname -m).tar.gz | tar -xz -C ${GOPATH}/bin{{ else }} {{ end }}'
|
|
- '{{ if ne OS "windows" }} chmod +x ${GOPATH}/bin/goreleaser{{ else }} {{ end }}'
|
|
- '{{ if eq OS "windows" }} echo "NOTICE: You must download goreleaser manually to build this application https://github.com/goreleaser/goreleaser/releases "{{ else }}:{{ end }}'
|
|
- go get -u github.com/alecthomas/gometalinter
|
|
- gometalinter --install
|
|
|
|
compile:
|
|
desc: Generates compiled frontend and backend resources (must be in this order)
|
|
cmds:
|
|
- task: compile:fe
|
|
- task: compile:be
|
|
|
|
compile:fe:
|
|
desc: Runs less, pug and node
|
|
dir: web
|
|
sources:
|
|
- resources/css/semaphore.less
|
|
- resources/html/*.pug
|
|
- resources/html/**/*.pug
|
|
generates:
|
|
- public/css/semaphore.css
|
|
- public/html/*.html
|
|
- public/html/**/*.html
|
|
- bundle.json
|
|
cmds:
|
|
- '{{ if eq OS "windows" }} .\\node_modules\\.bin\\lessc.cmd {{ else }} ./node_modules/.bin/lessc {{ end }} resources/less/semaphore.less > public/css/semaphore.css'
|
|
- '{{ if eq OS "windows" }} .\\node_modules\\.bin\\pug.cmd --pretty {{ else }} ./node_modules/.bin/pug {{ end }} resources/pug --out public/html'
|
|
- '{{ if eq OS "windows" }} xcopy node_modules\\font-awesome\\fonts public\\fonts /y {{ else }} cp node_modules/font-awesome/fonts/* public/fonts {{ end }}'
|
|
- node bundler.js
|
|
compile:be:
|
|
desc: Runs Packr for static assets
|
|
sources:
|
|
- web/public/*
|
|
- db/migrations/*
|
|
generates:
|
|
- db/db-packr.go
|
|
- api/api-packr.go
|
|
cmds:
|
|
- packr
|
|
- go run util/version_gen/generator.go {{ if .TAG }}{{ .TAG }}{{ else }}{{ if .SEMAPHORE_VERSION }}{{ .SEMAPHORE_VERSION }}{{ else }}{{ .BRANCH }}-{{ .SHA }}-{{ .TIMESTAMP }}{{ if .DIRTY }}-dirty{{ end }}{{ end }}{{end}}
|
|
vars:
|
|
TAG:
|
|
sh: git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null | sed -n 's/^\([^^~]\{1,\}\)\(\^0\)\{0,1\}$/\1/p'
|
|
BRANCH:
|
|
sh: git rev-parse --abbrev-ref HEAD
|
|
DIRTY:
|
|
# We must exclude the package-lock file as npm install can change it!
|
|
sh: git diff --exit-code --stat -- . ':(exclude)web/package-lock.json' ':(exclude)web/package.json'
|
|
SHA:
|
|
sh: git log --pretty=format:'%h' -n 1
|
|
TIMESTAMP:
|
|
sh: date +%s
|
|
|
|
compile:api:hooks:
|
|
dir: ./.dredd/hooks
|
|
cmds:
|
|
- go build -o ../compiled_hooks
|
|
|
|
watch:
|
|
desc: Watch fe and be file changes and rebuild
|
|
dir: web/resources
|
|
cmds:
|
|
- task: watch:fe
|
|
- task: watch:be
|
|
|
|
watch:be:
|
|
cmds:
|
|
- reflex -r '\.go$' -R '^node_modules/' -s -d none -- sh -c 'go build -i -o /tmp/semaphore_bin cli/main.go && /tmp/semaphore_bin -config $(pwd)/config.json'
|
|
|
|
watch:fe:
|
|
dir: web
|
|
cmds:
|
|
- ./node_modules/.bin/nodemon -w js -i bundle.js -e js bundler.js &
|
|
- ./node_modules/.bin/nodemon -w css -e less --exec "lessc resources/less/semaphore.less > public/css/semaphore.css" &
|
|
- ./node_modules/.bin/pug -w -P --doctype html resources/pug --out public/html &
|
|
|
|
build:
|
|
desc: Build a full set of release binaries and packages
|
|
cmds:
|
|
- task: release
|
|
|
|
build:local:
|
|
desc: Build a binary for the current architecture
|
|
dir: cli
|
|
cmds:
|
|
- go build -o ../bin/semaphore{{ if eq OS "windows" }}.exe{{ end }}
|
|
|
|
release:
|
|
desc: creates a release without performing validations or publishing artifacts
|
|
cmds:
|
|
- goreleaser --snapshot --rm-dist
|
|
|
|
release:prod:
|
|
cmds:
|
|
- goreleaser
|
|
|
|
lint:
|
|
cmds:
|
|
- task: lint:be
|
|
|
|
lint:be:
|
|
# --errors
|
|
cmds:
|
|
- gometalinter --exclude "\w*(-packr.go)" --vendor --disable goconst --deadline 240s ./...
|
|
|
|
test:
|
|
cmds:
|
|
- task: test:be
|
|
|
|
test:be:
|
|
desc: Run go code tests
|
|
cmds:
|
|
- go vet ./...
|
|
# 2> /dev/null makes goverage less noisy about pattern matching
|
|
# if no tests exist but will still print failing test results
|
|
- goverage -v -coverprofile=coverage.out ./... 2> /dev/null
|
|
|
|
test:api:
|
|
desc: test the api with dredd
|
|
cmds:
|
|
- ./web/node_modules/.bin/dredd --config .dredd/dredd.yml
|
|
|
|
ci:artifacts:
|
|
cmds:
|
|
- rsync -a bin/ $CIRCLE_ARTIFACTS/
|
|
|
|
# docker(-compose) commands
|
|
dc:dev:
|
|
desc: build and start a development stack using docker-compose
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
context: dev
|
|
args: build semaphore_dev
|
|
compose: true
|
|
- task: dc:up
|
|
vars:
|
|
context: dev
|
|
|
|
# convenience function to build and start a production like stack
|
|
dc:prod:
|
|
desc: build and start a production like stack using docker-compose
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
context: prod
|
|
args: build semaphore
|
|
compose: true
|
|
- task: dc:up
|
|
vars:
|
|
context: prod
|
|
|
|
dc:up:
|
|
desc: start a docker-compose instance, requires context
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
compose: true
|
|
args: up --abort-on-container-exit
|
|
context: "{{ .context }}"
|
|
|
|
dc:build:
|
|
desc: build a set of docker-compose containers, requires context
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
compose: true
|
|
args: build
|
|
context: "{{ .context }}"
|
|
|
|
dc:down:
|
|
desc: down a docker-compose instance, requires context
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
compose: true
|
|
args: down
|
|
context: "{{ .context }}"
|
|
|
|
dc:stop:
|
|
desc: stop a docker-compose instance, requires context
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
compose: true
|
|
args: stop
|
|
context: "{{ .context }}"
|
|
|
|
dc:build:dredd:
|
|
desc: build a dredd container to the local testing with docker-compose stack
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
context: dev
|
|
compose: true
|
|
prefix: -dredd
|
|
args: build
|
|
|
|
dc:up:dredd:
|
|
desc: build a dredd container to the local testing with docker-compose stack
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
context: dev
|
|
compose: true
|
|
prefix: -dredd
|
|
args: up
|
|
|
|
|
|
docker:build:
|
|
desc: Build an image for Semaphore, requires context
|
|
vars:
|
|
tag: "{{ if .tag }}{{ .tag }}{{ else }}latest{{ end }}"
|
|
cmds:
|
|
- task: docker
|
|
vars:
|
|
context: "{{ .context }}"
|
|
action: build
|
|
tag: "{{ .tag }}"
|
|
args: -t "{{ .docker_namespace }}/{{ .docker_image }}:{{ .tag }}" .
|
|
|
|
deps:docker:
|
|
desc: Install docker testing dependencies. These must be installed explicitly and are not included in the general deps task.
|
|
status:
|
|
- test -f /usr/local/bin/goss
|
|
- test -f /usr/local/bin/dgoss
|
|
- test -f /usr/local/bin/hadolint
|
|
cmds:
|
|
- sudo curl -L https://github.com/aelsabbahy/goss/releases/download/v0.3.5/goss-linux-amd64 -o /usr/local/bin/goss
|
|
- sudo chmod +rx /usr/local/bin/goss
|
|
- sudo curl -L https://raw.githubusercontent.com/aelsabbahy/goss/v0.3.5/extras/dgoss/dgoss -o /usr/local/bin/dgoss
|
|
- sudo chmod +rx /usr/local/bin/dgoss
|
|
- sudo curl -L https://github.com/hadolint/hadolint/releases/download/v1.5.0/hadolint-Linux-x86_64 -o /usr/local/bin/hadolint
|
|
- sudo chmod +rx /usr/local/bin/hadolint
|
|
|
|
docker:test:
|
|
desc: Test docker containers by building them, running tests and deleting
|
|
deps: ['deps:docker']
|
|
cmds:
|
|
- task: docker:lint
|
|
vars:
|
|
context: "{{ .context }}"
|
|
- task: docker:build
|
|
vars:
|
|
tag: "{{ .context }}-test"
|
|
- task: docker:goss
|
|
- docker rmi "{{ .docker_namespace }}/{{ .docker_image }}:{{ .context }}-test"
|
|
|
|
docker:goss:
|
|
dir: "deployment/docker/{{ .context}}"
|
|
deps: ['deps:docker']
|
|
cmds:
|
|
- GOSS_FILES_STRATEGY='cp' dgoss run -it "{{ .docker_namespace }}/{{ .docker_image }}:{{ .context }}-test"
|
|
|
|
docker:lint:
|
|
desc: hadolint a dockerfile. Ignores version pinning warning
|
|
dir: "deployment/docker/{{ .context}}"
|
|
cmds:
|
|
- hadolint Dockerfile --ignore DL3018
|
|
|
|
docker:push:
|
|
desc: push a docker image to a repo. Defaults to the official docker hub
|
|
cmds:
|
|
- docker push {{ .docker_namespace }}/{{ .docker_image }}:{{ .tag }}
|
|
|
|
# templated command to reduce code duplication
|
|
docker:
|
|
vars:
|
|
docker_root: deployment/docker/
|
|
cmds:
|
|
- docker{{ if .compose }}-compose{{ end }} {{ if .action }}{{ .action }}{{ end }} -f {{ .docker_root }}{{ .context }}/{{ if .compose }}docker-compose{{ if .prefix }}{{ .prefix }}{{ end }}.yml{{ else }}Dockerfile{{ if .prefix }}{{ .prefix }}{{ end }}{{ end }} {{if .args }}{{ .args }}{{ end }}
|