diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 2c46b198..818a40c6 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -1,13 +1,10 @@ -name: Push Request Testing +name: Dev Release on: push: branches: - - '*' # matches every branch - - '*/*' # matches every branch containing a single '/' - - '!master' # excludes master - pull_request: - branches: - - master + - dev + paths-ignore: + - '**.md' jobs: compile: @@ -51,7 +48,7 @@ jobs: name: static-rice-box path: ./source - pr-test: + test: needs: compile runs-on: ubuntu-latest @@ -85,9 +82,7 @@ jobs: - uses: actions/checkout@v2 - name: Install Global Dependencies - run: | - go get gotest.tools/gotestsum - npm install -g yarn sass newman cross-env wait-on @sentry/cli + run: npm install -g yarn sass newman cross-env wait-on @sentry/cli - name: Setting ENV's run: | @@ -112,7 +107,8 @@ jobs: - name: Go Tests run: | - SASS=`which sass` gotestsum --no-summary=skipped --format dots -- -covermode=count -coverprofile=coverage.out -p=1 ./... + go get gotest.tools/gotestsum + gotestsum --no-summary=skipped --format dots -- -covermode=count -coverprofile=coverage.out -p=1 ./... env: VERSION: ${{ env.VERSION }} DB_CONN: sqlite3 @@ -120,9 +116,34 @@ jobs: API_SECRET: demopassword123 DISABLE_LOGS: false ALLOW_REPORTS: true - PUSH_REQUEST: true + COVERALLS: ${{ secrets.COVERALLS }} + DISCORD_URL: ${{ secrets.DISCORD_URL }} + EMAIL_HOST: ${{ secrets.EMAIL_HOST }} + EMAIL_USER: ${{ secrets.EMAIL_USER }} + EMAIL_PASS: ${{ secrets.EMAIL_PASS }} + EMAIL_OUTGOING: ${{ secrets.EMAIL_OUTGOING }} + EMAIL_SEND_TO: ${{ secrets.EMAIL_SEND_TO }} + EMAIL_PORT: ${{ secrets.EMAIL_PORT }} + MOBILE_ID: ${{ secrets.MOBILE_ID }} + MOBILE_NUMBER: ${{ secrets.MOBILE_NUMBER }} + PUSHOVER_TOKEN: ${{ secrets.PUSHOVER_TOKEN }} + PUSHOVER_API: ${{ secrets.PUSHOVER_API }} + SLACK_URL: ${{ secrets.SLACK_URL }} + TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }} + TELEGRAM_CHANNEL: ${{ secrets.TELEGRAM_CHANNEL }} + TWILIO_SID: ${{ secrets.TWILIO_SID }} + TWILIO_SECRET: ${{ secrets.TWILIO_SECRET }} + TWILIO_FROM: ${{ secrets.TWILIO_FROM }} + TWILIO_TO: ${{ secrets.TWILIO_TO }} - pr-test-postman: + - name: Coveralls Testing Coverage + run: | + go get github.com/mattn/goveralls + goveralls -coverprofile=coverage.out -repotoken $COVERALLS + env: + COVERALLS: ${{ secrets.COVERALLS }} + + test-postman-sqlite: needs: compile runs-on: ubuntu-latest steps: @@ -154,13 +175,159 @@ jobs: - name: Run Statping run: | - API_SECRET=demosecret123 statping --port=8080 > /dev/null & - sleep 3 + API_SECRET=demosecret123 statping --port=8585 > /dev/null & + sleep 5 - - name: Postman Tests + - name: Postman SQLite Tests uses: matt-ball/newman-action@master with: + apiKey: ${{ secrets.POSTMAN_API }} collection: ./dev/postman.json - environment: ./dev/postman_environment_sqlite.json - timeoutRequest: 15000 - delayRequest: 500 + environment: ./dev/postman_env_sqlite.json + timeoutRequest: 30000 + delayRequest: 600 + + test-postman-mysql: + needs: compile + runs-on: ubuntu-latest + + services: + mysql: + image: mysql:5.7 + env: + MYSQL_ROOT_PASSWORD: password123 + MYSQL_DATABASE: statping + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.14.2' + + - name: Setting ENV's + run: | + echo "::add-path::$(go env GOPATH)/bin" + echo "::add-path::/opt/hostedtoolcache/node/10.20.1/x64/bin" + echo ::set-env name=VERSION::$(cat version.txt) + shell: bash + + - name: Download Compiled Frontend (rice-box.go) + uses: actions/download-artifact@v1 + with: + name: static-rice-box + path: ./source + + - name: Install Statping + env: + VERSION: ${{ env.VERSION }} + run: | + make build + chmod +x statping + mv statping $(go env GOPATH)/bin/ + + - name: Run Statping + run: | + API_SECRET=demosecret123 statping --port=8585 > /dev/null & + sleep 5 + + - name: Postman MySQL Tests + uses: matt-ball/newman-action@master + with: + apiKey: ${{ secrets.POSTMAN_API }} + collection: ./dev/postman.json + environment: ./dev/postman_env_mysql.json + timeoutRequest: 30000 + delayRequest: 600 + + test-postman-postgres: + needs: compile + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:10.8 + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: password123 + POSTGRES_DB: statping + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.14.2' + + - name: Setting ENV's + run: | + echo "::add-path::$(go env GOPATH)/bin" + echo "::add-path::/opt/hostedtoolcache/node/10.20.1/x64/bin" + echo ::set-env name=VERSION::$(cat version.txt) + shell: bash + + - name: Download Compiled Frontend (rice-box.go) + uses: actions/download-artifact@v1 + with: + name: static-rice-box + path: ./source + + - name: Install Statping + env: + VERSION: ${{ env.VERSION }} + run: | + make build + chmod +x statping + mv statping $(go env GOPATH)/bin/ + + - name: Run Statping + run: | + API_SECRET=demosecret123 statping --port=8585 > /dev/null & + sleep 5 + + - name: Postman Postgres Tests + uses: matt-ball/newman-action@master + with: + apiKey: ${{ secrets.POSTMAN_API }} + collection: ./dev/postman.json + environment: ./dev/postman_env_postgres.json + timeoutRequest: 30000 + delayRequest: 600 + + docker-release: + needs: upload-release + runs-on: ubuntu-latest + steps: + - name: Checkout Statping Repo + uses: actions/checkout@v2 + + - name: Setting ENV's + run: echo ::set-env name=VERSION::$(cat version.txt) + shell: bash + + - name: Base Docker Image + uses: elgohr/Publish-Docker-Github-Action@master + with: + name: statping/statping + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + dockerfile: Dockerfile.base + tags: "base" + + - name: Latest/Version Docker Image + uses: elgohr/Publish-Docker-Github-Action@master + env: + VERSION: ${{ env.VERSION }} + ARCH: amd64 + DOCKER_CLI_EXPERIMENTAL: enabled + with: + name: statping/statping + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + dockerfile: Dockerfile + tags: "dev" + buildargs: VERSION,ARCH diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000..0d3c67c0 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,167 @@ +name: Push Request Testing +on: + push: + branches: + - '*' # matches every branch + - '*/*' # matches every branch containing a single '/' + - '!master' # excludes master + - '!dev' # excludes dev + pull_request: + branches: + - master + +jobs: + compile: + runs-on: ubuntu-latest + steps: + - uses: actions/setup-go@v2 + with: + go-version: '1.14.2' + - uses: actions/setup-node@v1 + with: + node-version: '10.x' + - uses: actions/checkout@v2 + + - name: Add GOBIN to PATH + run: | + echo "::add-path::$(go env GOPATH)/bin" + echo ::set-env name=VERSION::$(cat version.txt) + shell: bash + + - name: Install Global Dependencies + run: npm install -g yarn sass cross-env + + - name: Download Frontend Dependencies + if: steps.nodecache.outputs.cache-hit != 'true' + working-directory: ./frontend + run: yarn + + - name: Download Go mods + if: steps.golangcache.outputs.cache-hit != 'true' + run: | + go mod download + go mod verify + make test-deps + + - name: Build Frontend Statping + run: make clean compile + + - name: Upload Compiled Frontend (rice-box.go) + uses: actions/upload-artifact@v1 + with: + name: static-rice-box + path: ./source + + pr-test: + needs: compile + runs-on: ubuntu-latest + + services: + postgres: + image: postgres:10.8 + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: password123 + POSTGRES_DB: statping + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + mysql: + image: mysql:5.7 + env: + MYSQL_ROOT_PASSWORD: password123 + MYSQL_DATABASE: statping + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + steps: + - uses: actions/setup-go@v2 + with: + go-version: '1.14.2' + - uses: actions/setup-node@v1 + with: + node-version: '10.x' + - uses: actions/checkout@v2 + + - name: Install Global Dependencies + run: | + go get gotest.tools/gotestsum + npm install -g yarn sass newman cross-env wait-on @sentry/cli + + - name: Setting ENV's + run: | + echo "::add-path::$(go env GOPATH)/bin" + echo "::add-path::/opt/hostedtoolcache/node/10.20.1/x64/bin" + echo ::set-env name=VERSION::$(cat version.txt) + shell: bash + + - name: Download Compiled Frontend (rice-box.go) + uses: actions/download-artifact@v1 + with: + name: static-rice-box + path: ./source + + - name: Install Statping + env: + VERSION: ${{ env.VERSION }} + run: | + make build certs + chmod +x statping + mv statping $(go env GOPATH)/bin/ + + - name: Go Tests + run: | + SASS=`which sass` gotestsum --no-summary=skipped --format dots -- -covermode=count -coverprofile=coverage.out -p=1 ./... + env: + VERSION: ${{ env.VERSION }} + DB_CONN: sqlite3 + STATPING_DIR: ${{ github.workspace }} + API_SECRET: demopassword123 + DISABLE_LOGS: false + ALLOW_REPORTS: true + PUSH_REQUEST: true + + pr-test-postman: + needs: compile + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.14.2' + + - name: Setting ENV's + run: | + echo "::add-path::$(go env GOPATH)/bin" + echo "::add-path::/opt/hostedtoolcache/node/10.20.1/x64/bin" + echo ::set-env name=VERSION::$(cat version.txt) + shell: bash + + - name: Download Compiled Frontend (rice-box.go) + uses: actions/download-artifact@v1 + with: + name: static-rice-box + path: ./source + + - name: Install Statping + env: + VERSION: ${{ env.VERSION }} + run: | + make build + chmod +x statping + mv statping $(go env GOPATH)/bin/ + + - name: Run Statping + run: | + API_SECRET=demosecret123 statping --port=8080 > /dev/null & + sleep 3 + + - name: Postman Tests + uses: matt-ball/newman-action@master + with: + collection: ./dev/postman.json + environment: ./dev/postman_environment_sqlite.json + timeoutRequest: 15000 + delayRequest: 500