summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/build.yml154
-rwxr-xr-x.github/workflows/ci-build.yml119
-rw-r--r--.github/workflows/codeql-analysis.yml2
-rw-r--r--.github/workflows/release.yml139
4 files changed, 294 insertions, 120 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..92b55666
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,154 @@
+name: build
+
+on:
+ push:
+ pull_request:
+
+jobs:
+ php:
+ name: Build (PHP ${{ matrix.php }}, ${{ matrix.setup }} setup)
+ runs-on: ubuntu-20.04
+ timeout-minutes: 6
+ strategy:
+ fail-fast: false
+ matrix:
+ php: ['7.3', '7.4', '8.0']
+ setup: [basic, lowest]
+ steps:
+ - name: Set up PHP ${{ matrix.php }}
+ uses: shivammathur/setup-php@v2 # action page: <https://github.com/shivammathur/setup-php>
+ with:
+ php-version: ${{ matrix.php }}
+
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Syntax check only (lint)
+ run: find ./src/ ./tests/ -name "*.php" -print0 | xargs -0 -n1 -P8 php -l
+
+ - name: Get Composer Cache Directory
+ id: composer-cache
+ run: echo "::set-output name=dir::$(composer config cache-files-dir)"
+
+ - name: Init Composer Cache # Docs: <https://git.io/JfAKn#php---composer>
+ uses: actions/cache@v2
+ with:
+ path: ${{ steps.composer-cache.outputs.dir }}
+ key: ${{ runner.os }}-composer-${{ matrix.setup }}-${{ hashFiles('**/composer.json') }}
+ restore-keys: ${{ runner.os }}-composer-
+
+ - name: Install lowest Composer dependencies
+ if: matrix.setup == 'lowest'
+ run: composer update --prefer-dist --no-progress --prefer-lowest --ansi
+
+ - name: Install basic Composer dependencies
+ if: matrix.setup == 'basic'
+ run: composer update --prefer-dist --no-progress --ansi
+
+ - name: Analyze PHP sources
+ run: composer analyze
+
+ # TODO write phpunit tests
+ #- name: Analyze PHP sources
+ # run: composer test
+
+ golang:
+ name: Build (Go ${{ matrix.go }}, PHP ${{ matrix.php }})
+ runs-on: ubuntu-20.04
+ timeout-minutes: 10
+ strategy:
+ fail-fast: false
+ matrix:
+ php: ['7.3', '7.4', '8.0']
+ go: ['1.14', '1.15']
+ steps:
+ - name: Set up Go ${{ matrix.go }}
+ uses: actions/setup-go@v2 # action page: <https://github.com/actions/setup-go>
+ with:
+ go-version: ${{ matrix.go }}
+
+ - name: Set up PHP ${{ matrix.php }}
+ uses: shivammathur/setup-php@v2 # action page: <https://github.com/shivammathur/setup-php>
+ with:
+ php-version: ${{ matrix.php }}
+
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Get Composer Cache Directory
+ id: composer-cache
+ run: echo "::set-output name=dir::$(composer config cache-files-dir)"
+
+ - name: Init Composer Cache # Docs: <https://git.io/JfAKn#php---composer>
+ uses: actions/cache@v2
+ with:
+ path: ${{ steps.composer-cache.outputs.dir }}
+ key: ${{ runner.os }}-composer-${{ matrix.php }}-${{ hashFiles('**/composer.json') }}
+ restore-keys: ${{ runner.os }}-composer-
+
+ - name: Install Composer dependencies
+ run: composer update --prefer-dist --no-progress --ansi
+
+ - name: Init Go modules Cache # Docs: <https://git.io/JfAKn#go---modules>
+ uses: actions/cache@v2
+ with:
+ path: ~/go/pkg/mod
+ key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
+ restore-keys: ${{ runner.os }}-go-
+
+ - name: Install Go dependencies
+ run: go mod download
+
+ - name: Run golang tests
+ run: |
+ mkdir ./coverage-ci
+ go test -race -v -covermode=atomic -coverprofile=./coverage-ci/lib.txt
+ go test ./util -race -v -covermode=atomic -coverprofile=./coverage-ci/util.txt
+ go test ./service -race -v -covermode=atomic -coverprofile=./coverage-ci/service.txt
+ go test ./service/env -race -v -covermode=atomic -coverprofile=./coverage-ci/env.txt
+ go test ./service/rpc -race -v -covermode=atomic -coverprofile=./coverage-ci/rpc.txt
+ go test ./service/http -race -v -covermode=atomic -coverprofile=./coverage-ci/http.txt
+ go test ./service/static -race -v -covermode=atomic -coverprofile=./coverage-ci/static.txt
+ go test ./service/limit -race -v -covermode=atomic -coverprofile=./coverage-ci/limit.txt
+ go test ./service/headers -race -v -covermode=atomic -coverprofile=./coverage-ci/headers.txt
+ go test ./service/metrics -race -v -covermode=atomic -coverprofile=./coverage-ci/metrics.txt
+ go test ./service/health -race -v -covermode=atomic -coverprofile=./coverage-ci/health.txt
+ go test ./service/gzip -race -v -covermode=atomic -coverprofile=./coverage-ci/gzip.txt
+ go test ./service/reload -race -v -covermode=atomic -coverprofile=./coverage-ci/reload.txt
+ cat ./coverage-ci/*.txt > ./coverage-ci/summary.txt
+
+ - uses: codecov/codecov-action@v1 # Docs: <https://github.com/codecov/codecov-action>
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ file: ./coverage-ci/summary.txt
+ fail_ci_if_error: false
+
+ golangci-check:
+ name: Golang-CI (lint)
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v1
+
+ - name: golangci-lint
+ uses: reviewdog/action-golangci-lint@v1 # action page: <https://github.com/reviewdog/action-golangci-lint>
+ with:
+ github_token: ${{ secrets.github_token }}
+
+ image:
+ name: Build docker image
+ runs-on: ubuntu-20.04
+ timeout-minutes: 10
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Build image
+ run: docker build -t roadrunner:local -f Dockerfile .
+
+ - name: Scan image
+ uses: anchore/scan-action@v2 # action page: <https://github.com/anchore/scan-action>
+ with:
+ image: roadrunner:local
+ fail-build: true
+ severity-cutoff: low # negligible, low, medium, high or critical
diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml
deleted file mode 100755
index 8ec3eec9..00000000
--- a/.github/workflows/ci-build.yml
+++ /dev/null
@@ -1,119 +0,0 @@
-name: CI
-
-on: [ push, pull_request ]
-
-jobs:
- build:
- name: Build (PHP ${{ matrix.php }}, Go ${{ matrix.go }}, OS ${{ matrix.os }})
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- php: [ 7.4, 8.0 ]
- go: [ 1.14, 1.15 ]
- os: [ ubuntu-20.04 ]
- env:
- GO111MODULE: on
- steps:
- - name: Set up Go ${{ matrix.go }}
- uses: actions/setup-go@v1
- with:
- go-version: ${{ matrix.go }}
-
- - name: Set up PHP ${{ matrix.php }}
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php }}
- extensions: dom
- coverage: xdebug
-
- - name: Check out code
- uses: actions/checkout@v2
- with:
- fetch-depth: 1
-
- - name: Show versions
- run: php -v ; composer -V ; go version
-
- - name: Debug if needed
- env:
- DEBUG: ${{ secrets.DEBUG }}
- run: if [[ "$DEBUG" == "true" ]]; then env && go env; fi
-
- - name: Syntax check only (lint)
- run: find ./src/ -name "*.php" -print0 | xargs -0 -n1 -P8 php -l
-
- - name: Get Composer Cache Directory # Docs: <https://github.com/actions/cache/blob/master/examples.md#php---composer>
- id: composer-cache
- run: echo "::set-output name=dir::$(composer config cache-files-dir)"
-
- - name: Cache dependencies # Docs: <https://github.com/actions/cache/blob/master/examples.md#php---composer>
- uses: actions/cache@v1
- with:
- path: ${{ steps.composer-cache.outputs.dir }}
- key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
- restore-keys: ${{ runner.os }}-composer-
-
- - name: Install Composer dependencies
- run: composer install --prefer-dist --no-interaction
-
- # - name: Analyze PHP sources
- # run: composer analyze
-
- - name: Install Go dependencies
- run: go mod download
-
- - name: Run golang tests
- run: |
- mkdir ./coverage-ci
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/lib.txt -covermode=atomic .
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/rpc_config.txt -covermode=atomic ./plugins/rpc
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/rpc.txt -covermode=atomic ./plugins/rpc/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/plugin_config.txt -covermode=atomic ./plugins/config/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/logger.txt -covermode=atomic ./plugins/logger/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/server.txt -covermode=atomic ./plugins/server/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/metrics.txt -covermode=atomic ./plugins/metrics/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/informer.txt -covermode=atomic ./plugins/informer/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/informer.txt -covermode=atomic ./plugins/resetter/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/attributes.txt -covermode=atomic ./plugins/http/attributes
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/http_tests.txt -covermode=atomic ./plugins/http/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/gzip.txt -covermode=atomic ./plugins/gzip/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/static.txt -covermode=atomic ./plugins/static/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/static_root.txt -covermode=atomic ./plugins/static
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/headers.txt -covermode=atomic ./plugins/headers/tests
- go test -v -race -cover -tags=debug -coverprofile=./coverage-ci/checker.txt -covermode=atomic ./plugins/checker/tests
- cat ./coverage-ci/*.txt > ./coverage-ci/summary.txt
-
- - name: Run code coverage
- uses: codecov/codecov-action@v1
- with:
- token: ${{ secrets.CODECOV_TOKEN }}
- files: summary.txt
- flags: unittests
- name: codecov-umbrella
- fail_ci_if_error: false
- verbose: true
-
-
- golangci-check:
- name: runner / golangci-lint
- runs-on: ubuntu-latest
- steps:
- - name: Check out code into the Go module directory
- uses: actions/checkout@v1
- - name: golangci-lint
- uses: reviewdog/action-golangci-lint@v1
- with:
- github_token: ${{ secrets.github_token }}
-
-# image:
-# name: Build docker image
-# runs-on: ubuntu-latest
-# steps:
-# - name: Check out code
-# uses: actions/checkout@v2
-# with:
-# fetch-depth: 1
-#
-# - name: Build image
-# run: docker build -t rr:local -f Dockerfile .
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 1c90e4a4..75e40110 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -47,7 +47,7 @@ jobs:
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
+ # By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..b1cd83ae
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,139 @@
+name: release
+
+on:
+ release: # Docs: <https://help.github.com/en/articles/events-that-trigger-workflows#release-event-release>
+ types: [published]
+
+jobs:
+ build:
+ name: Build for ${{ matrix.os }} (${{ matrix.arch }}, ${{ matrix.compiler }})
+ runs-on: ubuntu-20.04
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [windows, freebsd, darwin] # linux, freebsd, darwin, windows
+ compiler: [gcc] # gcc, musl-gcc
+ archiver: [zip] # tar, zip
+ arch: [amd64] # amd64, 386
+ include:
+ - os: linux
+ compiler: gcc
+ archiver: tar
+ arch: amd64
+ - os: ''
+ compiler: musl-gcc # more info: <https://musl.libc.org/>
+ archiver: zip
+ arch: amd64
+ steps:
+ - name: Set up Go
+ uses: actions/setup-go@v2
+ with:
+ go-version: 1.15.5
+
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Install musl
+ if: matrix.compiler == 'musl-gcc'
+ run: sudo apt-get install -y musl-tools
+
+ - name: Download dependencies
+ run: go mod download # `-x` means "verbose" mode
+
+ - name: Generate builder values
+ id: values
+ run: |
+ echo "::set-output name=version::`echo ${GITHUB_REF##*/} | sed -e 's/^[vV ]*//'`"
+ echo "::set-output name=timestamp::`date +%FT%T%z`"
+ echo "::set-output name=binary-name::rr`[ ${{ matrix.os }} = 'windows' ] && echo '.exe'`"
+
+ - name: Compile binary file
+ env:
+ GOOS: ${{ matrix.os }}
+ GOARCH: ${{ matrix.arch }}
+ CC: ${{ matrix.compiler }}
+ CGO_ENABLED: 0
+ LDFLAGS: >-
+ -s
+ -X github.com/spiral/roadrunner/cmd/rr/cmd.Version=${{ steps.values.outputs.version }}
+ -X github.com/spiral/roadrunner/cmd/rr/cmd.BuildTime=${{ steps.values.outputs.timestamp }}
+ run: |
+ go build -trimpath -ldflags "$LDFLAGS" -o "./${{ steps.values.outputs.binary-name }}" ./cmd/rr/main.go
+ stat "./${{ steps.values.outputs.binary-name }}"
+
+ - name: Generate distributive directory name
+ id: dist-dir
+ run: >
+ echo "::set-output name=name::roadrunner-${{ steps.values.outputs.version }}-$(
+ [ ${{ matrix.os }} != '' ] && echo '${{ matrix.os }}' || echo 'unknown'
+ )$(
+ [ ${{ matrix.compiler }} = 'musl-gcc' ] && echo '-musl'
+ )-${{ matrix.arch }}"
+
+ - name: Generate distributive archive name
+ id: dist-arch
+ run: >
+ echo "::set-output name=name::${{ steps.dist-dir.outputs.name }}.$(
+ case ${{ matrix.archiver }} in
+ zip) echo 'zip';;
+ tar) echo 'tar.gz';;
+ *) exit 10;
+ esac
+ )"
+
+ - name: Create distributive
+ run: |
+ mkdir ${{ steps.dist-dir.outputs.name }}
+ mv "./${{ steps.values.outputs.binary-name }}" ./${{ steps.dist-dir.outputs.name }}/
+ cp ./README.md ./CHANGELOG.md ./LICENSE ./${{ steps.dist-dir.outputs.name }}/
+
+ - name: Pack distributive using tar
+ if: matrix.archiver == 'tar'
+ run: tar -zcf "${{ steps.dist-arch.outputs.name }}" "${{ steps.dist-dir.outputs.name }}"
+
+ - name: Pack distributive using zip
+ if: matrix.archiver == 'zip'
+ run: zip -r -q "${{ steps.dist-arch.outputs.name }}" "${{ steps.dist-dir.outputs.name }}"
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: ${{ steps.dist-dir.outputs.name }}
+ path: ${{ steps.dist-arch.outputs.name }}
+ if-no-files-found: error
+ retention-days: 30
+
+ - name: Upload binaries to release
+ uses: svenstaro/upload-release-action@v2
+ with:
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
+ file: ${{ steps.dist-arch.outputs.name }}
+ asset_name: ${{ steps.dist-arch.outputs.name }}
+ tag: ${{ github.ref }}
+
+ docker:
+ name: Build docker image
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v2
+
+ - name: Make docker login
+ run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_LOGIN }}" --password-stdin
+
+ - name: Generate builder values
+ id: values
+ run: |
+ echo "::set-output name=version::`echo ${GITHUB_REF##*/} | sed -e 's/^[vV ]*//'`"
+ echo "::set-output name=timestamp::`date +%FT%T%z`"
+
+ - name: Build image
+ run: |
+ docker build \
+ --tag "spiralscout/roadrunner:${{ steps.values.outputs.version }}" \
+ --build-arg "APP_VERSION=${{ steps.values.outputs.version }}" \
+ --build-arg "BUILD_TIME=${{ steps.values.outputs.timestamp }}" \
+ .
+
+ - name: Push image into registry
+ run: docker push "spiralscout/roadrunner:${{ steps.values.outputs.version }}"