From ec384f469c4c9a042d8ab3b3dc3c29a716136d7b Mon Sep 17 00:00:00 2001 From: Adam Boutcher Date: Fri, 13 Aug 2021 18:03:57 +0100 Subject: [PATCH] Workflow Changes --- .github/workflows/development.yml | 19 - .github/workflows/quick-dev.yml | 149 ------ .github/workflows/{master.yml => stable.yml} | 4 +- .github/workflows/unstable.yml | 488 +++++++++++++++++++ 4 files changed, 490 insertions(+), 170 deletions(-) delete mode 100644 .github/workflows/quick-dev.yml rename .github/workflows/{master.yml => stable.yml} (99%) create mode 100644 .github/workflows/unstable.yml diff --git a/.github/workflows/development.yml b/.github/workflows/development.yml index 9e190270..5e4ad37e 100644 --- a/.github/workflows/development.yml +++ b/.github/workflows/development.yml @@ -148,25 +148,6 @@ jobs: rm -rf statping echo "compressed=statping-darwin-${{ matrix.arch }}.tar.gz" >> $GITHUB_ENV - - name: Upload Compiled Statping Binary - uses: actions/upload-artifact@v1 - with: - name: statping-${{ matrix.platform }}-${{ matrix.arch }} - path: ./build - - - name: Upload Releases - id: upload-assets - uses: softprops/action-gh-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - VERSION: ${{ env.VERSION }} - with: - tag_name: dev-v${{ env.VERSION }} - draft: true - prerelease: true - files: build/${{ env.compressed }} - - test: needs: frontend runs-on: [self-hosted, linux, aboutcher-hosted] diff --git a/.github/workflows/quick-dev.yml b/.github/workflows/quick-dev.yml deleted file mode 100644 index 098530f0..00000000 --- a/.github/workflows/quick-dev.yml +++ /dev/null @@ -1,149 +0,0 @@ -name: QuickDev Build -on: - push: - branches: - - dev - paths-ignore: - - '**.md' - -jobs: - - frontend: - runs-on: [self-hosted, linux, aboutcher-hosted] - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: 1.15.x - - uses: actions/setup-node@v1 - with: - node-version: 12.18.2 - - - name: Set Version - run: | - echo "$(go env GOPATH)/bin" >> $GITHUB_PATH - echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV - shell: bash - - - name: Install Global Dependencies - run: npm install -g yarn sass cross-env mjml - - - name: Download Frontend Dependencies - working-directory: ./frontend - run: yarn - - - name: Download Go mods - run: | - go mod download - go mod verify - make test-deps - - - name: Build Frontend Statping - env: - VERSION: ${{ env.VERSION }} - COMMIT: ${{ github.sha }} - MJML_APP: ${{ secrets.MJML_APP }} - MJML_PRIVATE: ${{ secrets.MJML_PRIVATE }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - run: make clean generate compile - - - name: Upload Compiled Frontend (rice-box.go) - uses: actions/upload-artifact@v1 - with: - name: static-rice-box - path: ./source - - build: - needs: frontend - runs-on: [self-hosted, linux, aboutcher-hosted] - strategy: - matrix: - platform: [linux] - arch: [386, amd64, arm-7, arm-6, arm64] - include: - - platform: darwin - arch: amd64 - - platform: windows - arch: amd64 - - steps: - - uses: actions/checkout@v2 - - - name: Download Compiled Frontend (rice-box.go) - uses: actions/download-artifact@v1 - with: - name: static-rice-box - path: ./source - - - name: Add GOBIN to PATH - run: | - echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV - shell: bash - - - name: Set Linux Build Flags - if: matrix.platform == 'linux' - run: | - echo "BUILD_FLAGS=-extldflags -static" >> $GITHUB_ENV - echo "XGO_TAGS=netgo osusergo linux sqlite_omit_load_extension" >> $GITHUB_ENV - shell: bash - - - name: Set Darwin Build Flags - if: matrix.platform == 'darwin' - run: echo "XGO_TAGS=netgo osusergo darwin sqlite_omit_load_extension" >> $GITHUB_ENV - shell: bash - - - name: Set Windows Build Flags - if: matrix.platform == 'windows' - run: | - echo "BUILD_FLAGS=-extldflags -static" >> $GITHUB_ENV - echo "XGO_TAGS=netgo osusergo sqlite_omit_load_extension" >> $GITHUB_ENV - shell: bash - - - name: Build ${{ matrix.platform }}/${{ matrix.arch }} - uses: crazy-max/ghaction-xgo@v1 - env: - VERSION: ${{ env.VERSION }} - COMMIT: ${{ github.sha }} - with: - xgo_version: latest - go_version: 1.15.x - dest: build - prefix: statping - targets: ${{ matrix.platform }}/${{ matrix.arch }} - v: false - x: false - pkg: cmd - buildmode: pie - tags: ${{ env.XGO_TAGS }} - ldflags: -s -w -X main.VERSION=${{ env.VERSION }} -X main.COMMIT=${{ env.COMMIT }} ${{ env.BUILD_FLAGS }} - - - name: Compress Linux Builds - if: matrix.platform == 'linux' - run: | - cd build - mv statping-linux-${{ matrix.arch }} statping - chmod +x statping - tar -czvf statping-linux-${{ matrix.arch }}.tar.gz statping - rm -rf statping - echo "compressed=statping-linux-${{ matrix.arch }}.tar.gz" >> $GITHUB_ENV - - - name: Compress Windows Builds - if: matrix.platform == 'windows' - run: | - cd build - mv statping-windows-4.0-${{ matrix.arch }}.exe statping.exe - chmod +x statping.exe - zip statping-windows-${{ matrix.arch }}.zip statping.exe - rm -rf statping.exe - echo "compressed=statping-windows-${{ matrix.arch }}.zip" >> $GITHUB_ENV - - - name: Compress Darwin Builds - if: matrix.platform == 'darwin' - run: | - cd build - mv statping-darwin-10.6-${{ matrix.arch }} statping - chmod +x statping - tar -czvf statping-darwin-${{ matrix.arch }}.tar.gz statping - rm -rf statping - echo "compressed=statping-darwin-${{ matrix.arch }}.tar.gz" >> $GITHUB_ENV diff --git a/.github/workflows/master.yml b/.github/workflows/stable.yml similarity index 99% rename from .github/workflows/master.yml rename to .github/workflows/stable.yml index d3ba4a78..924ecbc5 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/stable.yml @@ -1,8 +1,8 @@ -name: Master Build +name: Stable Build, Test and Deploy on: push: branches: - - master + - stable paths-ignore: - '**.md' diff --git a/.github/workflows/unstable.yml b/.github/workflows/unstable.yml new file mode 100644 index 00000000..f8701f6b --- /dev/null +++ b/.github/workflows/unstable.yml @@ -0,0 +1,488 @@ +name: Unstable Build, Test and Deploy +on: + push: + branches: + - dev + paths-ignore: + - '**.md' + +jobs: + + frontend: + runs-on: [self-hosted, linux, aboutcher-hosted] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: 1.15.x + - uses: actions/setup-node@v1 + with: + node-version: 12.18.2 + + - name: Set Version + run: | + echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV + shell: bash + + - name: Install Global Dependencies + run: npm install -g yarn sass cross-env mjml + + - name: Download Frontend Dependencies + working-directory: ./frontend + run: yarn + + - name: Download Go mods + run: | + go mod download + go mod verify + make test-deps + + - name: Build Frontend Statping + env: + VERSION: ${{ env.VERSION }} + COMMIT: ${{ github.sha }} + MJML_APP: ${{ secrets.MJML_APP }} + MJML_PRIVATE: ${{ secrets.MJML_PRIVATE }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + run: make clean generate compile + + - name: Upload Compiled Frontend (rice-box.go) + uses: actions/upload-artifact@v1 + with: + name: static-rice-box + path: ./source + + build: + needs: frontend + runs-on: [self-hosted, linux, aboutcher-hosted] + strategy: + matrix: + platform: [linux] + arch: [386, amd64, arm-7, arm-6, arm64] + include: +# - platform: darwin +# arch: amd64 + - platform: windows + arch: amd64 + + steps: + - uses: actions/checkout@v2 + + - name: Download Compiled Frontend (rice-box.go) + uses: actions/download-artifact@v1 + with: + name: static-rice-box + path: ./source + + - name: Add GOBIN to PATH + run: | + echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV + shell: bash + + - name: Set Linux Build Flags + if: matrix.platform == 'linux' + run: | + echo "BUILD_FLAGS=-extldflags -static" >> $GITHUB_ENV + echo "XGO_TAGS=netgo osusergo linux sqlite_omit_load_extension" >> $GITHUB_ENV + shell: bash + +# - name: Set Darwin Build Flags +# if: matrix.platform == 'darwin' +# run: echo "XGO_TAGS=netgo osusergo darwin sqlite_omit_load_extension" >> $GITHUB_ENV +# shell: bash + + - name: Set Windows Build Flags + if: matrix.platform == 'windows' + run: | + echo "BUILD_FLAGS=-extldflags -static" >> $GITHUB_ENV + echo "XGO_TAGS=netgo osusergo sqlite_omit_load_extension" >> $GITHUB_ENV + shell: bash + + - name: Build ${{ matrix.platform }}/${{ matrix.arch }} + uses: crazy-max/ghaction-xgo@v1 + env: + VERSION: ${{ env.VERSION }} + COMMIT: ${{ github.sha }} + with: + xgo_version: latest + go_version: 1.15.x + dest: build + prefix: statping + targets: ${{ matrix.platform }}/${{ matrix.arch }} + v: false + x: false + pkg: cmd + buildmode: pie + tags: ${{ env.XGO_TAGS }} + ldflags: -s -w -X main.VERSION=${{ env.VERSION }} -X main.COMMIT=${{ env.COMMIT }} ${{ env.BUILD_FLAGS }} + + - name: Compress Linux Builds + if: matrix.platform == 'linux' + run: | + cd build + mv statping-linux-${{ matrix.arch }} statping + chmod +x statping + tar -czvf statping-linux-${{ matrix.arch }}.tar.gz statping + rm -rf statping + echo "compressed=statping-linux-${{ matrix.arch }}.tar.gz" >> $GITHUB_ENV + + - name: Compress Windows Builds + if: matrix.platform == 'windows' + run: | + cd build + mv statping-windows-4.0-${{ matrix.arch }}.exe statping.exe + chmod +x statping.exe + zip statping-windows-${{ matrix.arch }}.zip statping.exe + rm -rf statping.exe + echo "compressed=statping-windows-${{ matrix.arch }}.zip" >> $GITHUB_ENV + +# - name: Compress Darwin Builds +# if: matrix.platform == 'darwin' +# run: | +# cd build +# mv statping-darwin-10.6-${{ matrix.arch }} statping +# chmod +x statping +# tar -czvf statping-darwin-${{ matrix.arch }}.tar.gz statping +# rm -rf statping +# echo "compressed=statping-darwin-${{ matrix.arch }}.tar.gz" >> $GITHUB_ENV + + - name: Upload Compiled Statping Binary + uses: actions/upload-artifact@v1 + with: + name: statping-${{ matrix.platform }}-${{ matrix.arch }} + path: ./build + + - name: Upload Releases + id: upload-assets + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VERSION: ${{ env.VERSION }} + with: + tag_name: dev-v${{ env.VERSION }} + draft: true + prerelease: true + files: build/${{ env.compressed }} + + + test: + needs: frontend + runs-on: [self-hosted, linux, aboutcher-hosted] + 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/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: 1.15.x + - uses: actions/setup-node@v1 + with: + node-version: 12.18.2 + + - name: Install Global Dependencies + run: npm install -g yarn sass newman cross-env wait-on @sentry/cli + + - name: Setting ENV's + run: | + echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + echo "/opt/hostedtoolcache/node/12.18.2/x64/bin" >> $GITHUB_PATH + echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV + 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 }} + COMMIT: ${{ github.sha }} + run: | + make build certs + chmod +x statping + mv statping $(go env GOPATH)/bin/ + + - name: Go Tests + run: | + go get gotest.tools/gotestsum + gotestsum --no-summary=skipped --format testname -- -covermode=count -coverprofile=coverage.out -p=1 ./... + env: + VERSION: ${{ env.VERSION }} + COMMIT: ${{ github.sha }} + DB_CONN: sqlite3 + STATPING_DIR: ${{ github.workspace }} + API_SECRET: demopassword123 + DISABLE_LOGS: false + ALLOW_REPORTS: true + SAMPLE_DATA: 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 }} + TEST_EMAIL: ${{ secrets.TEST_EMAIL }} + GOTIFY_URL: ${{ secrets.GOTIFY_URL }} + GOTIFY_TOKEN: ${{ secrets.GOTIFY_TOKEN }} + SNS_TOKEN: ${{ secrets.SNS_TOKEN }} + SNS_SECRET: ${{ secrets.SNS_SECRET }} + SNS_REGION: ${{ secrets.SNS_REGION }} + SNS_TOPIC: ${{ secrets.SNS_TOPIC }} + + - 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: frontend + runs-on: [self-hosted, linux, aboutcher-hosted] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: 1.15.x + + - name: Setting ENV's + run: | + echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + echo "/opt/hostedtoolcache/node/12.18.2/x64/bin" >> $GITHUB_PATH + echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV + 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 }} + COMMIT: ${{ github.sha }} + 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 SQLite Tests + uses: matt-ball/newman-action@master + with: + apiKey: ${{ secrets.POSTMAN_API }} + collection: ./dev/postman.json + environment: ./dev/postman_env_sqlite.json + timeoutRequest: 30000 + delayRequest: 600 + + test-postman-mysql: + needs: frontend + runs-on: [self-hosted, linux, aboutcher-hosted] + + 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.15.x + + - name: Setting ENV's + run: | + echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + echo "/opt/hostedtoolcache/node/12.18.2/x64/bin" >> $GITHUB_PATH + echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV + 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 }} + COMMIT: ${{ github.sha }} + MJML_APP: ${{ secrets.MJML_APP }} + MJML_PRIVATE: ${{ secrets.MJML_PRIVATE }} + 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: frontend + runs-on: [self-hosted, linux, aboutcher-hosted] + + 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.15.x + + - name: Setting ENV's + run: | + echo "$(go env GOPATH)/bin" >> $GITHUB_PATH + echo "/opt/hostedtoolcache/node/12.18.2/x64/bin" >> $GITHUB_PATH + echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV + 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 }} + COMMIT: ${{ github.sha }} + 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: [test, build, test-postman-sqlite, test-postman-mysql, test-postman-postgres] + runs-on: [self-hosted, linux, aboutcher-hosted] + steps: + - name: Checkout Statping Repo + uses: actions/checkout@v2 + + - name: Setting ENV's + run: echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV + shell: bash + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + id: buildx + with: + install: true + + - name: Docker Login + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin + + - name: Cache Docker layers + uses: actions/cache@v2 + id: buildx-docker-master + with: + path: /tmp/.buildx-cache + key: buildx-docker-master + restore-keys: | + buildx-docker-master + - name: Docker Build :base + run: make buildx-base + + - name: Docker Build :dev + run: make buildx-dev + +# sentry-release: +# needs: [test, test-postman-sqlite, test-postman-postgres, test-postman-mysql] +# runs-on: [self-hosted, linux, aboutcher-hosted] +# steps: +# - name: Checkout Statping Repo +# uses: actions/checkout@v2 +# +# - name: Setup Sentry CLI +# uses: mathrix-education/setup-sentry-cli@master +# with: +# version: latest +# url: ${{ secrets.SENTRY_URL }} +# token: ${{ secrets.SENTRY_AUTH_TOKEN }} +# organization: statping +# +# - name: Setting ENV's +# run: echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV +# shell: bash +# +# - name: Sentry Release +# run: make sentry-release