Code Quality #152
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Code Quality | |
on: | |
schedule: # scheduled to run at 23.00 on Saturday (UTC), means 6.00 on Monday (WIB) | |
- cron: '0 23 * * 6' | |
push: | |
branches: [main] | |
paths: ['.github/**.yml', '**.php', '**.js', '**.ts', '**.vue'] | |
pull_request: | |
branches: [main] | |
types: [opened, synchronize, reopened] | |
paths: ['.github/**.yml', '**.php', '**.js', '**.ts', '**.vue'] | |
env: | |
APP_NAME: Creasi Skeleton | |
APP_ENV: testing | |
APP_URL: http://127.0.0.1:8000 | |
APP_KEY: ${{ secrets.APP_KEY }} | |
# AWS_ENDPOINT: 'https://is3.cloudhost.id' | |
# AWS_DEFAULT_REGION: 'ap-southeast-3' | |
# AWS_BUCKET: creasi-staging | |
DB_DATABASE: creasico | |
DB_USERNAME: creasico | |
DB_PASSWORD: secret | |
MAIL_FROM_ADDRESS: devtest@creasi.dev | |
SENTRY_LARAVEL_DSN: ${{ secrets.SENTRY_DSN }} | |
SENTRY_TRACE_QUEUE_ENABLED: true | |
SENTRY_TRACES_SAMPLE_RATE: 1.0 | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
name: Build | |
env: | |
VITE_SENTRY_DSN: ${{ secrets.SENTRY_DSN }} | |
VITE_SENTRY_TRACE_QUEUE_ENABLED: true | |
VITE_SENTRY_TRACES_SAMPLE_RATE: 1.0 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Set up pnpm | |
uses: pnpm/action-setup@v2 | |
- name: Setup Node.JS | |
uses: actions/setup-node@v3 | |
with: | |
cache: pnpm | |
node-version: 16.x | |
registry-url: https://registry.npmjs.org | |
- name: Install dependencies | |
run: pnpm install | |
- name: Build assets | |
run: pnpm build | |
- name: Store assets | |
uses: actions/upload-artifact@v3 | |
with: | |
name: public | |
path: public/build | |
units: | |
runs-on: ubuntu-latest | |
name: Unit Test with PHP ${{ matrix.php }} | |
needs: build | |
env: | |
TELESCOPE_ENABLED: false | |
services: | |
postgresql: | |
image: postgres:14 | |
env: | |
POSTGRES_DB: ${{ env.DB_DATABASE }} | |
POSTGRES_USER: ${{ env.DB_USERNAME }} | |
POSTGRES_PASSWORD: ${{ env.DB_PASSWORD }} | |
ports: | |
- 5432:5432 | |
options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3 | |
strategy: | |
fail-fast: false | |
matrix: | |
php: ['8.0', '8.1', '8.2'] | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Setup PHP ${{ matrix.php }} | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php }} | |
extensions: curl, dom, gd, imagick, intl, libxml, mbstring, pcntl, pdo, pdo_pgsql, zip | |
ini-values: error_reporting=E_ALL | |
tools: composer:v2 | |
coverage: none | |
- name: Download assets | |
id: download | |
uses: actions/download-artifact@v3 | |
with: | |
name: public | |
path: public/build | |
- name: Get Composer cache directory | |
id: composer-cache | |
run: | | |
echo "GIT_BRANCH=$(echo ${GIT_BRANCH##*/} | tr / -)" >> $GITHUB_ENV | |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache Composer dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.composer-cache.outputs.dir }} | |
key: ${{ runner.os }}-${{ matrix.php }}-composer- | |
restore-keys: ${{ runner.os }}-${{ matrix.php }}-composer- | |
- name: Install dependencies | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 5 | |
max_attempts: 3 | |
command: composer update --prefer-dist --no-interaction --no-progress | |
- name: Run unit tests | |
run: php artisan test | |
e2e: | |
runs-on: ubuntu-latest | |
name: Integration Test on BrowserStack | |
needs: units | |
env: | |
DUSK_HEADLESS_DISABLED: true | |
TELESCOPE_ENABLED: false | |
services: | |
postgresql: | |
image: postgres:14 | |
env: | |
POSTGRES_DB: ${{ env.DB_DATABASE }} | |
POSTGRES_USER: ${{ env.DB_USERNAME }} | |
POSTGRES_PASSWORD: ${{ env.DB_PASSWORD }} | |
ports: | |
- 5432:5432 | |
options: --health-cmd=pg_isready --health-interval=10s --health-timeout=5s --health-retries=3 | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: 8.2 | |
extensions: curl, dom, gd, igbinary, imagick, intl, libxml, mbstring, pcntl, pdo, pdo_pgsql, redis, zip | |
ini-values: error_reporting=E_ALL | |
tools: composer:v2 | |
coverage: xdebug | |
env: | |
REDIS_CONFIGURE_OPTS: --enable-redis --enable-redis-igbinary | |
- name: Download assets | |
id: download | |
uses: actions/download-artifact@v3 | |
with: | |
name: public | |
path: public/build | |
- name: Get Composer cache directory | |
id: composer-cache | |
run: | | |
echo "GIT_BRANCH=$(echo ${GIT_BRANCH##*/} | tr / -)" >> $GITHUB_ENV | |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache Composer dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.composer-cache.outputs.dir }} | |
key: ${{ runner.os }}-composer- | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Install dependencies | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 5 | |
max_attempts: 3 | |
command: composer update --prefer-dist --no-interaction --no-progress | |
- name: Setup BrowserStack env # Invokes the setup-env action | |
uses: browserstack/github-actions/setup-env@master | |
with: | |
username: ${{ secrets.BROWSERSTACK_USERNAME }} | |
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} | |
- name: Start BrowserStack local tunnel | |
uses: browserstack/github-actions/setup-local@master | |
with: | |
local-testing: start | |
local-logging-level: all-logs | |
local-identifier: random | |
- name: Start dev server | |
run: php artisan serve > /dev/null 2>&1 & | |
- name: Run e2e tests | |
run: php artisan dusk | |
- name: Upload e2e tests logs | |
if: failure() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: e2e-logs | |
path: | | |
tests/Browser/console | |
tests/Browser/screenshots | |
- name: Stop BrowserStack local tunnel | |
uses: browserstack/github-actions/setup-local@master | |
with: | |
local-testing: stop | |
deploy: | |
runs-on: ubuntu-latest | |
name: Deploy | |
needs: e2e | |
if: ${{ github.ref_name == 'main' && github.event_name == 'push' }} | |
environment: | |
name: staging | |
url: https://skeleton.creasi.dev | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: 8.2 | |
extensions: curl, intl, libxml, mbstring, pcntl, ssh2, zip | |
ini-values: error_reporting=E_ALL | |
tools: composer:v2 | |
coverage: none | |
- name: Get Composer cache directory | |
id: composer-cache | |
run: | | |
echo "GIT_BRANCH=$(echo ${GIT_BRANCH##*/} | tr / -)" >> $GITHUB_ENV | |
echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | |
- name: Cache Composer dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.composer-cache.outputs.dir }} | |
key: ${{ runner.os }}-composer- | |
restore-keys: ${{ runner.os }}-composer- | |
- name: Prepare | |
run: | | |
[[ ! -d $HOME/.ssh ]] && mkdir $HOME/.ssh | |
echo "${{ secrets.STAGING_SERVER_RSAKEY }}" >> $HOME/.ssh/id_rsa | |
echo "${{ secrets.STAGING_SERVER_SSH_CONFIG }}" >> $HOME/.ssh/config | |
chmod 600 $HOME/.ssh/* && ls -al $HOME/.ssh/ | |
git config user.name "Creasi.HQ" && git config user.email "dev@creasi.co" | |
- name: Install dependencies | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 5 | |
max_attempts: 3 | |
command: composer update --prefer-dist --no-interaction --no-progress | |
- name: Download assets | |
id: download | |
uses: actions/download-artifact@v3 | |
with: | |
name: public | |
path: public/build | |
- name: Deploy repo | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 2 | |
max_attempts: 3 | |
command: | | |
./vendor/bin/dep deploy:unlock | |
./vendor/bin/dep deploy |