Skip to content

Commit

Permalink
Merge pull request #149 from marc-mabe/ghaction
Browse files Browse the repository at this point in the history
Migrate from travis to GH workflow
  • Loading branch information
marc-mabe authored Oct 12, 2020
2 parents 6b5f56d + bdffbba commit e9dd470
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 90 deletions.
18 changes: 18 additions & 0 deletions .github/workflows/test.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
ARG PHP_VERSION=latest
FROM php:${PHP_VERSION}-cli-alpine

WORKDIR /workdir

# install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV COMPOSER_HTACCESS_PROTECT=0
ENV COMPOSER_CACHE_DIR=/.composer

# install PHP extension pcov
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
&& mkdir -p /usr/src/php/ext/pcov && curl -fsSL https://pecl.php.net/get/pcov | tar xvz -C /usr/src/php/ext/pcov --strip 1 \
&& docker-php-ext-install pcov \
&& docker-php-ext-enable pcov \
&& rm -Rf /usr/src/php/ext/pcov \
&& apk del --no-cache .build-deps
105 changes: 105 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Test

on:
pull_request:
push:
branches:
- master
- '[0-9]+.x'

jobs:
php:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- PHP_VERSION: 7.1
CODE_COVERAGE: false
RUN_PHPSTAN: false
RUN_PSALM: false
RUN_BENCHMARK: false
- PHP_VERSION: 7.2
CODE_COVERAGE: true
RUN_PHPSTAN: false
RUN_PSALM: false
RUN_BENCHMARK: false
- PHP_VERSION: 7.3
CODE_COVERAGE: true
RUN_PHPSTAN: false
RUN_PSALM: false
RUN_BENCHMARK: false
- PHP_VERSION: 7.4
CODE_COVERAGE: true
RUN_PHPSTAN: true
RUN_PSALM: true
RUN_BENCHMARK: true
- PHP_VERSION: 8.0-rc
CODE_COVERAGE: true
RUN_PHPSTAN: true
RUN_PSALM: true
RUN_BENCHMARK: true
COMPOSER_EXTRA_ARGS: --ignore-platform-reqs

steps:
- uses: actions/checkout@v2

- name: Cache Docker Image
id: cache-docker-image
uses: actions/cache@v2
with:
path: /tmp/docker-image.tar
key: cache-docker-image-test:${{ matrix.PHP_VERSION }}

- name: Load Docker Image
if: steps.cache-docker-image.outputs.cache-hit == 'true'
run: docker load --input /tmp/docker-image.tar

- name: Build Docker Image
if: steps.cache-docker-image.outputs.cache-hit != 'true'
run: docker build -f .github/workflows/test.Dockerfile -t 'test:${{ matrix.PHP_VERSION }}' --build-arg 'PHP_VERSION=${{ matrix.PHP_VERSION }}' .

- name: Cache Composer Cache Files
uses: actions/cache@v2
with:
path: /tmp/composer-cache-files
key: cache-composer-cache-files-${{ matrix.PHP_VERSION }}
restore-keys: |
cache-composer-cache-files-
- name: Install Composer Dependencies
run: |
if [ "${{ matrix.RUN_PHPSTAN }}" != "true" ]; then composer remove --dev phpstan/phpstan --no-update --no-interaction; fi
if [ "${{ matrix.RUN_PSALM }}" != "true" ]; then composer remove --dev vimeo/psalm --no-update --no-interaction; fi
if [ "${{ matrix.RUN_BENCHMARK }}" != "true" ]; then composer remove --dev phpbench/phpbench --no-update --no-interaction; fi
docker run --rm -u "$(id -u):$(id -g)" -v "$(pwd):/workdir" -v '/tmp/composer-cache-files:/.composer' 'test:${{ matrix.PHP_VERSION }}' composer install --no-interaction --no-progress --prefer-dist ${{ matrix.COMPOSER_EXTRA_ARGS }}
- name: Run Unit Test
run: |
if [ "${{ matrix.CODE_COVERAGE }}" == "true" ]; then
docker run --rm -u "$(id -u):$(id -g)" -v "$(pwd):/workdir" 'test:${{ matrix.PHP_VERSION }}' php -d 'zend.assertions=1' -d 'pcov.enabled=1' ./vendor/bin/phpunit --coverage-clover=.clover.xml
else
docker run --rm -u "$(id -u):$(id -g)" -v "$(pwd):/workdir" 'test:${{ matrix.PHP_VERSION }}' php -d 'zend.assertions=1' ./vendor/bin/phpunit
fi
- name: Upload Codecov Report
uses: codecov/codecov-action@v1
if: ${{ matrix.CODE_COVERAGE }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: .clover.xml

- name: Run PHPStan
if: ${{ matrix.RUN_PHPSTAN }}
run: docker run --rm -u "$(id -u):$(id -g)" -v "$(pwd):/workdir" 'test:${{ matrix.PHP_VERSION }}' php -d 'memory_limit=2G' ./vendor/bin/phpstan analyse --level max src/ tests/

- name: Run psalm
if: ${{ matrix.RUN_PSALM }}
run: mkdir -p "$HOME/.cache/psalm" && docker run --rm -u "$(id -u):$(id -g)" -v "$(pwd):/workdir" -v "$HOME/.cache/psalm:/.cache/psalm" 'test:${{ matrix.PHP_VERSION }}' php ./vendor/bin/psalm

- name: Run benchmark
if: ${{ matrix.RUN_BENCHMARK }}
run: docker run --rm -u "$(id -u):$(id -g)" -v "$(pwd):/workdir" 'test:${{ matrix.PHP_VERSION }}' php -d 'zend.assertions=-1' ./vendor/bin/phpbench run --no-interaction --revs=1 --retry-threshold=100 --progress=travis

- name: Export Docker Image
if: steps.cache-docker-image.outputs.cache-hit != 'true'
run: docker save --output /tmp/docker-image.tar 'test:${{ matrix.PHP_VERSION }}'
83 changes: 0 additions & 83 deletions .travis.yml

This file was deleted.

10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# php-enum
[![Build Status](https://secure.travis-ci.org/marc-mabe/php-enum.png?branch=master)](http://travis-ci.org/marc-mabe/php-enum)
[![Quality Score](https://scrutinizer-ci.com/g/marc-mabe/php-enum/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/marc-mabe/php-enum/)
[![Code Coverage](https://scrutinizer-ci.com/g/marc-mabe/php-enum/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/marc-mabe/php-enum/)
[![Total Downloads](https://poser.pugx.org/marc-mabe/php-enum/downloads.png)](https://packagist.org/packages/marc-mabe/php-enum)
[![Build Status](https://github.com/marc-mabe/php-enum/workflows/Test/badge.svg?branch=master)](https://github.com/marc-mabe/php-enum/actions?query=workflow%3ATest%20branch%3Amaster)
[![Code Coverage](https://codecov.io/github/marc-mabe/php-enum/coverage.svg?branch=master)](https://codecov.io/gh/marc-mabe/php-enum/branch/master/)
[![License](https://poser.pugx.org/marc-mabe/php-enum/license)](https://github.com/marc-mabe/php-enum/blob/master/LICENSE.txt)
[![Latest Stable](https://poser.pugx.org/marc-mabe/php-enum/v/stable.png)](https://packagist.org/packages/marc-mabe/php-enum)
[![Total Downloads](https://poser.pugx.org/marc-mabe/php-enum/downloads.png)](https://packagist.org/packages/marc-mabe/php-enum)
[![Monthly Downloads](https://poser.pugx.org/marc-mabe/php-enum/d/monthly)](https://packagist.org/packages/marc-mabe/php-enum)
[![Dependents](https://poser.pugx.org/marc-mabe/php-enum/dependents)](https://packagist.org/packages/marc-mabe/php-enum/dependents?order_by=downloads)

This is a native PHP implementation to add enumeration support to PHP.
It's an abstract class that needs to be extended to use it.
Expand Down
2 changes: 2 additions & 0 deletions src/Enum.php
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,8 @@ final public static function getConstants()
$constants = $scopeConstants + $constants;
} while (($reflection = $reflection->getParentClass()) && $reflection->name !== __CLASS__);

/** @var array<string, null|bool|int|float|string|array<mixed>> $constants */

assert(
self::noAmbiguousValues($constants),
'Ambiguous enumerator values detected for ' . static::class
Expand Down
9 changes: 6 additions & 3 deletions tests/MabeEnumTest/EnumMapTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -477,10 +477,13 @@ public function testSerializable(): void

public function testIsEmpty(): void
{
/** @var array<int, string> $items2 */
$items2 = array_combine(Enum32::getValues(), Enum32::getNames());
$makeItems2 = function () {
foreach (Enum32::getEnumerators() as $enumerator) {
yield $enumerator => $enumerator->getName();
}
};
$map1 = new EnumMap(Enum32::class, []);
$map2 = new EnumMap(Enum32::class, $items2);
$map2 = new EnumMap(Enum32::class, $makeItems2());

$this->assertTrue($map1->isEmpty());
$this->assertFalse($map2->isEmpty());
Expand Down

0 comments on commit e9dd470

Please sign in to comment.