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.4', '8.0' ] setup: [ basic, lowest ] steps: - name: Set up PHP ${{ matrix.php }} uses: shivammathur/setup-php@v2 # action page: 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: 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.4', '8.0' ] go: [ '1.14', '1.15' ] steps: - name: Set up Go ${{ matrix.go }} uses: actions/setup-go@v2 # action page: with: go-version: ${{ matrix.go }} - name: Set up PHP ${{ matrix.php }} uses: shivammathur/setup-php@v2 # action page: 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: 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: 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 -v -race -cover -tags=debug -coverprofile=lib.txt -covermode=atomic . go test -v -race -cover -tags=debug -coverprofile=rpc_config.txt -covermode=atomic ./plugins/rpc go test -v -race -cover -tags=debug -coverprofile=rpc.txt -covermode=atomic ./plugins/rpc/tests go test -v -race -cover -tags=debug -coverprofile=plugin_config.txt -covermode=atomic ./plugins/config/tests go test -v -race -cover -tags=debug -coverprofile=logger.txt -covermode=atomic ./plugins/logger/tests go test -v -race -cover -tags=debug -coverprofile=server.txt -covermode=atomic ./plugins/server/tests go test -v -race -cover -tags=debug -coverprofile=metrics.txt -covermode=atomic ./plugins/metrics/tests go test -v -race -cover -tags=debug -coverprofile=informer.txt -covermode=atomic ./plugins/informer/tests go test -v -race -cover -tags=debug -coverprofile=informer.txt -covermode=atomic ./plugins/resetter/tests go test -v -race -cover -tags=debug -coverprofile=attributes.txt -covermode=atomic ./plugins/http/attributes go test -v -race -cover -tags=debug -coverprofile=http_tests.txt -covermode=atomic ./plugins/http/tests go test -v -race -cover -tags=debug -coverprofile=gzip.txt -covermode=atomic ./plugins/gzip/tests go test -v -race -cover -tags=debug -coverprofile=static.txt -covermode=atomic ./plugins/static/tests go test -v -race -cover -tags=debug -coverprofile=static_root.txt -covermode=atomic ./plugins/static go test -v -race -cover -tags=debug -coverprofile=headers.txt -covermode=atomic ./plugins/headers/tests go test -v -race -cover -tags=debug -coverprofile=checker.txt -covermode=atomic ./plugins/checker/tests cat ./coverage-ci/*.txt > ./coverage-ci/summary.txt - uses: codecov/codecov-action@v1 # Docs: 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: 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: with: image: roadrunner:local fail-build: true severity-cutoff: low # negligible, low, medium, high or critical