-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 4c96d37
Showing
11 changed files
with
1,106 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
on: [push, pull_request] | ||
name: CI | ||
env: | ||
REGISTRY: ghcr.io | ||
IMAGE_NAME: ${{ github.repository }} | ||
jobs: | ||
# golang-github-actions is failing due to go version incompatibility | ||
# issue ref: https://github.com/grandcolline/golang-github-actions/issues/20 | ||
static-analysis: | ||
name: Static analysis | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 1 | ||
- uses: dominikh/[email protected] | ||
with: | ||
version: "2022.1" | ||
|
||
lint: | ||
name: lint | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: golangci-lint | ||
continue-on-error: true | ||
run: | | ||
make lint | ||
build: | ||
name: Build the executable | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/setup-go@v2 | ||
with: | ||
go-version: 1.18.x | ||
- uses: actions/checkout@v2 | ||
- name: Build | ||
run: | | ||
make build | ||
- name: Upload binaries | ||
uses: actions/upload-artifact@master | ||
with: | ||
name: Executables | ||
path: "bin" | ||
- name: Release | ||
uses: softprops/action-gh-release@v1 | ||
if: startsWith(github.ref, 'refs/tags/v') | ||
with: | ||
files: | | ||
bin/* | ||
env: | ||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | ||
build-and-push-image: | ||
runs-on: ubuntu-latest | ||
needs: [lint, build] | ||
permissions: | ||
contents: read | ||
packages: write | ||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v2 | ||
- name: Log in to the Container registry | ||
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
- name: Extract metadata (tags, labels) for Docker | ||
id: meta | ||
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 | ||
with: | ||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | ||
- name: Build and push Docker image | ||
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc | ||
with: | ||
context: . | ||
push: true | ||
tags: ${{ steps.meta.outputs.tags }} | ||
labels: ${{ steps.meta.outputs.labels }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
bin/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
go: | ||
version: 1.18 | ||
repository: | ||
path: github.com/stakefish/cosmos-watcher | ||
build: | ||
binaries: | ||
- name: bin/cosmos-watcher | ||
path: ./cmd/cosmos-watcher | ||
flags: -a -tags 'netgo static_build' | ||
ldflags: | | ||
-X github.com/prometheus/common/version.Version={{.Version}} | ||
-X github.com/prometheus/common/version.Revision={{.Revision}} | ||
-X github.com/prometheus/common/version.Branch={{.Branch}} | ||
-X github.com/prometheus/common/version.BuildUser={{user}}@{{host}} | ||
-X github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
ARG OS="linux" | ||
ARG ARCH="amd64" | ||
|
||
FROM golang:1.18 as builder | ||
|
||
WORKDIR /app | ||
|
||
ENV CGO_ENABLED=0 | ||
ENV GOOS=${OS} | ||
ENV GOARCH=${ARCH} | ||
|
||
COPY . . | ||
RUN make build | ||
|
||
# second step to build minimal image | ||
FROM quay.io/prometheus/busybox-${OS}-${ARCH}:latest | ||
|
||
COPY --from=builder /app/bin/cosmos-watcher /go/bin/cosmos-watcher | ||
|
||
EXPOSE 5577 | ||
USER nobody | ||
ENTRYPOINT [ "/go/bin/cosmos-watcher" ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Ensure that 'all' is the default target otherwise it will be the first target from Makefile.common. | ||
all:: | ||
|
||
include Makefile.common |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,263 @@ | ||
# Copyright 2018 The Prometheus Authors | ||
# Licensed under the Apache License, Version 2.0 (the "License"); | ||
# you may not use this file except in compliance with the License. | ||
# You may obtain a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, software | ||
# distributed under the License is distributed on an "AS IS" BASIS, | ||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
# See the License for the specific language governing permissions and | ||
# limitations under the License. | ||
|
||
|
||
# A common Makefile that includes rules to be reused in different prometheus projects. | ||
# !!! Open PRs only against the prometheus/prometheus/Makefile.common repository! | ||
|
||
# Example usage : | ||
# Create the main Makefile in the root project directory. | ||
# include Makefile.common | ||
# customTarget: | ||
# @echo ">> Running customTarget" | ||
|
||
# stakefish modification | ||
# | ||
# Because not all the features fit our requirements. We removed some features: | ||
# * docker build related | ||
# * check license | ||
# * test | ||
|
||
# Ensure GOBIN is not set during build so that promu is installed to the correct path | ||
unexport GOBIN | ||
|
||
GO ?= go | ||
GOFMT ?= $(GO)fmt | ||
FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) | ||
GOOPTS ?= | ||
GOHOSTOS ?= $(shell $(GO) env GOHOSTOS) | ||
GOHOSTARCH ?= $(shell $(GO) env GOHOSTARCH) | ||
|
||
GO_VERSION ?= $(shell $(GO) version) | ||
GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) | ||
PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') | ||
|
||
GOVENDOR := | ||
GO111MODULE := | ||
ifeq (, $(PRE_GO_111)) | ||
ifneq (,$(wildcard go.mod)) | ||
# Enforce Go modules support just in case the directory is inside GOPATH (and for Travis CI). | ||
GO111MODULE := on | ||
|
||
ifneq (,$(wildcard vendor)) | ||
# Always use the local vendor/ directory to satisfy the dependencies. | ||
GOOPTS := $(GOOPTS) -mod=vendor | ||
endif | ||
endif | ||
else | ||
ifneq (,$(wildcard go.mod)) | ||
ifneq (,$(wildcard vendor)) | ||
$(warning This repository requires Go >= 1.11 because of Go modules) | ||
$(warning Some recipes may not work as expected as the current Go runtime is '$(GO_VERSION_NUMBER)') | ||
endif | ||
else | ||
# This repository isn't using Go modules (yet). | ||
GOVENDOR := $(FIRST_GOPATH)/bin/govendor | ||
endif | ||
endif | ||
PROMU := $(FIRST_GOPATH)/bin/promu | ||
pkgs = ./... | ||
|
||
ifeq (arm, $(GOHOSTARCH)) | ||
GOHOSTARM ?= $(shell GOARM= $(GO) env GOARM) | ||
GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH)v$(GOHOSTARM) | ||
else | ||
GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH) | ||
endif | ||
|
||
GOTEST := $(GO) test | ||
GOTEST_DIR := | ||
ifneq ($(CIRCLE_JOB),) | ||
ifneq ($(shell which gotestsum),) | ||
GOTEST_DIR := test-results | ||
GOTEST := gotestsum --junitfile $(GOTEST_DIR)/unit-tests.xml -- | ||
endif | ||
endif | ||
|
||
PROMU_VERSION ?= 0.13.0 | ||
PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz | ||
|
||
GOLANGCI_LINT := | ||
GOLANGCI_LINT_OPTS ?= | ||
GOLANGCI_LINT_VERSION ?= v1.42.0 | ||
# golangci-lint only supports linux, darwin and windows platforms on i386/amd64. | ||
# windows isn't included here because of the path separator being different. | ||
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) | ||
ifeq ($(GOHOSTARCH),$(filter $(GOHOSTARCH),amd64 i386)) | ||
# If we're in CI and there is an Actions file, that means the linter | ||
# is being run in Actions, so we don't need to run it here. | ||
ifeq (,$(CIRCLE_JOB)) | ||
GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint | ||
else ifeq (,$(wildcard .github/workflows/golangci-lint.yml)) | ||
GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint | ||
endif | ||
endif | ||
endif | ||
|
||
PREFIX ?= $(shell pwd) | ||
BIN_DIR ?= $(shell pwd) | ||
|
||
ifeq ($(GOHOSTARCH),amd64) | ||
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) | ||
# Only supported on amd64 | ||
test-flags := -race | ||
endif | ||
endif | ||
|
||
# This rule is used to forward a target like "build" to "common-build". This | ||
# allows a new "build" target to be defined in a Makefile which includes this | ||
# one and override "common-build" without override warnings. | ||
%: common-% ; | ||
|
||
.PHONY: common-all | ||
common-all: precheck style lint yamllint unused build | ||
|
||
.PHONY: common-style | ||
common-style: | ||
@echo ">> checking code style" | ||
@fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ | ||
if [ -n "$${fmtRes}" ]; then \ | ||
echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ | ||
echo "Please ensure you are using $$($(GO) version) for formatting code."; \ | ||
exit 1; \ | ||
fi | ||
|
||
.PHONY: common-deps | ||
common-deps: | ||
@echo ">> getting dependencies" | ||
ifdef GO111MODULE | ||
GO111MODULE=$(GO111MODULE) $(GO) mod download | ||
else | ||
$(GO) get $(GOOPTS) -t ./... | ||
endif | ||
|
||
.PHONY: update-go-deps | ||
update-go-deps: | ||
@echo ">> updating Go dependencies" | ||
@for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \ | ||
$(GO) get -d $$m; \ | ||
done | ||
GO111MODULE=$(GO111MODULE) $(GO) mod tidy | ||
ifneq (,$(wildcard vendor)) | ||
GO111MODULE=$(GO111MODULE) $(GO) mod vendor | ||
endif | ||
|
||
.PHONY: common-format | ||
common-format: | ||
@echo ">> formatting code" | ||
GO111MODULE=$(GO111MODULE) $(GO) fmt $(pkgs) | ||
|
||
.PHONY: common-vet | ||
common-vet: | ||
@echo ">> vetting code" | ||
GO111MODULE=$(GO111MODULE) $(GO) vet $(GOOPTS) $(pkgs) | ||
|
||
.PHONY: common-lint | ||
common-lint: $(GOLANGCI_LINT) | ||
ifdef GOLANGCI_LINT | ||
@echo ">> running golangci-lint" | ||
ifdef GO111MODULE | ||
# 'go list' needs to be executed before staticcheck to prepopulate the modules cache. | ||
# Otherwise staticcheck might fail randomly for some reason not yet explained. | ||
GO111MODULE=$(GO111MODULE) $(GO) list -e -compiled -test=true -export=false -deps=true -find=false -tags= -- ./... > /dev/null | ||
GO111MODULE=$(GO111MODULE) $(GOLANGCI_LINT) run $(GOLANGCI_LINT_OPTS) $(pkgs) | ||
else | ||
$(GOLANGCI_LINT) run $(pkgs) | ||
endif | ||
endif | ||
|
||
.PHONY: common-yamllint | ||
common-yamllint: | ||
@echo ">> running yamllint on all YAML files in the repository" | ||
ifeq (, $(shell which yamllint)) | ||
@echo "yamllint not installed so skipping" | ||
else | ||
yamllint . | ||
endif | ||
|
||
# For backward-compatibility. | ||
.PHONY: common-staticcheck | ||
common-staticcheck: lint | ||
|
||
.PHONY: common-unused | ||
common-unused: $(GOVENDOR) | ||
ifdef GOVENDOR | ||
@echo ">> running check for unused packages" | ||
@$(GOVENDOR) list +unused | grep . && exit 1 || echo 'No unused packages' | ||
else | ||
ifdef GO111MODULE | ||
@echo ">> running check for unused/missing packages in go.mod" | ||
GO111MODULE=$(GO111MODULE) $(GO) mod tidy | ||
ifeq (,$(wildcard vendor)) | ||
@git diff --exit-code -- go.sum go.mod | ||
else | ||
@echo ">> running check for unused packages in vendor/" | ||
GO111MODULE=$(GO111MODULE) $(GO) mod vendor | ||
@git diff --exit-code -- go.sum go.mod vendor/ | ||
endif | ||
endif | ||
endif | ||
|
||
.PHONY: common-build | ||
common-build: promu | ||
@echo ">> building binaries" | ||
GO111MODULE=$(GO111MODULE) $(PROMU) build --prefix $(PREFIX) $(PROMU_BINARIES) | ||
|
||
.PHONY: common-tarball | ||
common-tarball: promu | ||
@echo ">> building release tarball" | ||
$(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) | ||
|
||
.PHONY: promu | ||
promu: $(PROMU) | ||
|
||
$(PROMU): | ||
$(eval PROMU_TMP := $(shell mktemp -d)) | ||
curl -s -L $(PROMU_URL) | tar -xvzf - -C $(PROMU_TMP) | ||
mkdir -p $(FIRST_GOPATH)/bin | ||
cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu | ||
rm -r $(PROMU_TMP) | ||
|
||
.PHONY: proto | ||
proto: | ||
@echo ">> generating code from proto files" | ||
@./scripts/genproto.sh | ||
|
||
ifdef GOLANGCI_LINT | ||
$(GOLANGCI_LINT): | ||
mkdir -p $(FIRST_GOPATH)/bin | ||
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/$(GOLANGCI_LINT_VERSION)/install.sh \ | ||
| sed -e '/install -d/d' \ | ||
| sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION) | ||
endif | ||
|
||
ifdef GOVENDOR | ||
.PHONY: $(GOVENDOR) | ||
$(GOVENDOR): | ||
GOOS= GOARCH= $(GO) get -u github.com/kardianos/govendor | ||
endif | ||
|
||
.PHONY: precheck | ||
precheck:: | ||
|
||
define PRECHECK_COMMAND_template = | ||
precheck:: $(1)_precheck | ||
|
||
PRECHECK_COMMAND_$(1) ?= $(1) $$(strip $$(PRECHECK_OPTIONS_$(1))) | ||
.PHONY: $(1)_precheck | ||
$(1)_precheck: | ||
@if ! $$(PRECHECK_COMMAND_$(1)) 1>/dev/null 2>&1; then \ | ||
echo "Execution of '$$(PRECHECK_COMMAND_$(1))' command failed. Is $(1) installed?"; \ | ||
exit 1; \ | ||
fi | ||
endef |
Oops, something went wrong.