mirror of https://github.com/statping/statping
ci build setup
parent
46f9330e9c
commit
0c72195683
|
@ -0,0 +1,7 @@
|
||||||
|
# This file allows Github to automatically request reviews from
|
||||||
|
# code owners when certain files are changed.
|
||||||
|
# Ref: https://github.com/blog/2392-introducing-de-owners
|
||||||
|
|
||||||
|
* @razorpay/Tech
|
||||||
|
|
||||||
|
ci.yml vivek.aggarwal@razorpay.com sunny.aggrawal@razorpay.com ankit.gupta@razorpay.com amrendra.singh@razorpay.com manikant.pandit@razorpay.com
|
|
@ -0,0 +1,11 @@
|
||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "gomod" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
|
@ -0,0 +1,76 @@
|
||||||
|
name: CI
|
||||||
|
on: [ push ]
|
||||||
|
jobs:
|
||||||
|
cancel:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
name: Cancel Previous Runs
|
||||||
|
if: always()
|
||||||
|
steps:
|
||||||
|
- uses: styfle/cancel-workflow-action@d57d93c3a8110b00c3a2c0b64b8516013c9fd4c9
|
||||||
|
if: github.ref != 'refs/heads/master'
|
||||||
|
name: cancel old workflows
|
||||||
|
id: cancel
|
||||||
|
with:
|
||||||
|
access_token: ${{ github.token }}
|
||||||
|
- if: github.ref == 'refs/heads/master'
|
||||||
|
name: Don't cancel old workflows
|
||||||
|
id: dont_cancel
|
||||||
|
run: |
|
||||||
|
echo "Don't cancel old workflow"
|
||||||
|
|
||||||
|
build-statping-docker-image:
|
||||||
|
name: Docker image - statping
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v1
|
||||||
|
with:
|
||||||
|
registry: c.rzp.io
|
||||||
|
username: ${{ secrets.HARBOR_DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.HARBOR_DOCKER_PASSWORD }}
|
||||||
|
repository: ${{ github.repository }}
|
||||||
|
dockerfile: ./Dockerfile
|
||||||
|
build_args: GIT_COMMIT_HASH=${{ github.sha }},GIT_TOKEN=${{ secrets.GIT_TOKEN }}
|
||||||
|
push: true
|
||||||
|
tags: service_${{ github.sha }}
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
name: fmt
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
continue-on-error: false
|
||||||
|
steps:
|
||||||
|
- name: checkout
|
||||||
|
id: checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: format
|
||||||
|
uses: docker://golang:1.13-alpine3.10
|
||||||
|
env:
|
||||||
|
GIT_TOKEN: ${{ secrets.GIT_TOKEN }}
|
||||||
|
with:
|
||||||
|
entrypoint: /bin/sh
|
||||||
|
args: ./scripts/run_tests.sh fmt drone
|
||||||
|
|
||||||
|
workflow_status:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
name: Update Status Check
|
||||||
|
needs: [ build-statping-docker-image]
|
||||||
|
if: always()
|
||||||
|
steps:
|
||||||
|
- name: Failed
|
||||||
|
id: failed
|
||||||
|
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
|
||||||
|
run: |
|
||||||
|
echo 'Failing the workflow for github status check.'
|
||||||
|
curl -X POST -H "Content-Type: application/json" -H "Authorization: token ${{ github.token }}" \
|
||||||
|
-d '{ "state" : "failure" , "context" : "github/combined-status-check" , "description" : "github/combined-status-check", "target_url" : "https://github.com/${{ github.repository }}" }' \
|
||||||
|
https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.sha }}
|
||||||
|
exit 1
|
||||||
|
- name: Success
|
||||||
|
if: steps.failed.conclusion == 'skipped'
|
||||||
|
run: |
|
||||||
|
echo 'Status check has passed!'
|
||||||
|
curl -X POST -H "Content-Type: application/json" -H "Authorization: token ${{ github.token }}" \
|
||||||
|
-d '{ "state" : "success" , "context" : "github/combined-status-check" , "description" : "github/combined-status-check", "target_url" : "https://github.com/${{ github.repository }}" }' \
|
||||||
|
https://api.github.com/repos/${{ github.repository }}/statuses/${{ github.sha }}
|
||||||
|
exit 0
|
|
@ -0,0 +1,37 @@
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [ opened, reopened, edited, synchronize]
|
||||||
|
name: Mandatory-Jira-Check
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
Find-Jira-Id:
|
||||||
|
name: Find-Jira-Id
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@master
|
||||||
|
|
||||||
|
- name: Checkout GitHub Action Repo
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: Razorpay/check-commit-jira
|
||||||
|
path: .github/actions/check-commit-jira
|
||||||
|
ref: combined_check
|
||||||
|
token: ${{ secrets.GIT_TOKEN }}
|
||||||
|
- name: Login
|
||||||
|
uses: ./.github/actions/check-commit-jira/jira-login
|
||||||
|
env:
|
||||||
|
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
|
||||||
|
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
|
||||||
|
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
|
||||||
|
|
||||||
|
# Find Issue on JIRA
|
||||||
|
- name: Get Issue Key
|
||||||
|
id: find
|
||||||
|
uses: ./.github/actions/check-commit-jira/jira-issue-check
|
||||||
|
with:
|
||||||
|
from: pull_request
|
||||||
|
# Print JIRA ID found on jira
|
||||||
|
- name: Find issue info
|
||||||
|
run: echo "Issue ${{ steps.find.outputs.issue }} was found"
|
|
@ -0,0 +1,14 @@
|
||||||
|
name: Semgrep
|
||||||
|
on: [pull_request, push]
|
||||||
|
jobs:
|
||||||
|
semgrep:
|
||||||
|
name: Scan
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: returntocorp/semgrep-action@v1
|
||||||
|
with:
|
||||||
|
publishToken: ${{ secrets.SEMGREP_APP_TOKEN }}
|
||||||
|
publishDeployment: 339
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@ -0,0 +1,66 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# set -eux
|
||||||
|
|
||||||
|
test_env=$2
|
||||||
|
if [[ "${test_env}" = "drone" ]]; then
|
||||||
|
echo "Setting up code"
|
||||||
|
ORIG_DIR=/github/workspace/
|
||||||
|
SRC_DIR=/go/src/github.com/razorpay/statping
|
||||||
|
mkdir -p ${SRC_DIR}
|
||||||
|
cp -Rp ${ORIG_DIR} ${SRC_DIR}
|
||||||
|
cd ${SRC_DIR}
|
||||||
|
cp -r workspace/* .
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$1" = "fmt" ]]; then
|
||||||
|
echo "Running go fmt"
|
||||||
|
files=$(gofmt -l $(find . -type f -name '*.go' -not -path "./vendor/*") 2>&1)
|
||||||
|
if [[ "$files" ]]; then
|
||||||
|
echo "These files did not pass the gofmt check:"
|
||||||
|
echo ${files}
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$1" = "test" ]]; then
|
||||||
|
echo "Installing dependencies"
|
||||||
|
apk add --no-cache git gcc musl-dev
|
||||||
|
export GO111MODULE="on"
|
||||||
|
echo 'exec echo ${GIT_TOKEN}' > /tmp/askpass.sh
|
||||||
|
chmod +x /tmp/askpass.sh
|
||||||
|
export GIT_ASKPASS=/tmp/askpass.sh
|
||||||
|
go mod vendor
|
||||||
|
go version
|
||||||
|
echo "Running mysql migrations"
|
||||||
|
go run cmd/migration/mysql/main.go -env=drone up
|
||||||
|
echo "Running postgres migrations"
|
||||||
|
go run cmd/migration/postgres/main.go -env=drone up
|
||||||
|
cp configs/drone.toml configs/test.toml
|
||||||
|
|
||||||
|
echo "Running tests ${DRONE_BRANCH}"
|
||||||
|
|
||||||
|
echo "Running Unit tests with coverage Test"
|
||||||
|
go generate ./...
|
||||||
|
#Interate all the go packages after listing it
|
||||||
|
list=$(go list ./...)
|
||||||
|
i=1
|
||||||
|
#Run the go test for each package and generate a cov with the package name
|
||||||
|
for pkg in $list
|
||||||
|
do
|
||||||
|
go test -coverprofile=pkg-$i.cover.out -coverpkg=./... -covermode=atomic $pkg
|
||||||
|
x=$?
|
||||||
|
i=$((i+1))
|
||||||
|
if [[ $x -ne 0 ]]; then
|
||||||
|
echo "Unit tests failed"
|
||||||
|
exit $x
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "mode: set" > sonarqube.cov && cat *.cover.out | grep -v mode: | sort -r | \
|
||||||
|
# Merge all the cov file and generate sonaqube.cov files
|
||||||
|
awk '{if($1 != last) {print $0;last=$1}}' >> sonarqube.cov
|
||||||
|
#Renaming the file with the drone_build_number to identify uniquely in drone
|
||||||
|
cp sonarqube.cov /github/workspace/sonarqube.cov
|
||||||
|
exit $?
|
||||||
|
fi
|
Loading…
Reference in New Issue