mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-06 22:40:14 -05:00
e9afa6f40f
Refs CORE-120 When test runs execute, use the new @tryghost/metrics package to send metrics to configurable backends. At the moment, we're just sending the test run duration to our metric store in preparation of changes to the test suite.
232 lines
7 KiB
YAML
232 lines
7 KiB
YAML
name: Test Suite
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches:
|
|
- main
|
|
- 'v4.*'
|
|
- 3.x
|
|
- 2.x
|
|
- 'renovate/*'
|
|
env:
|
|
FORCE_COLOR: 1
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-18.04
|
|
if: github.event_name == 'push' || (github.event_name == 'pull_request' && !startsWith(github.head_ref, 'renovate/'))
|
|
name: Lint
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-node@v2
|
|
with:
|
|
node-version: '14.17.0'
|
|
- run: yarn
|
|
- run: yarn lint
|
|
- uses: daniellockyer/action-slack-build@master
|
|
if: failure() && github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
with:
|
|
status: ${{ job.status }}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
|
|
migrations:
|
|
runs-on: ubuntu-18.04
|
|
if: github.event_name == 'push' || (github.event_name == 'pull_request' && !startsWith(github.head_ref, 'renovate/'))
|
|
strategy:
|
|
matrix:
|
|
DB: ['sqlite3', 'mysql']
|
|
env:
|
|
database__client: ${{ matrix.DB }}
|
|
database__connection__filename: /dev/shm/ghost-test.db
|
|
database__connection__host: 127.0.0.1
|
|
database__connection__user: root
|
|
database__connection__password: root
|
|
database__connection__database: ghost_testing
|
|
name: Migrations - ${{ matrix.DB }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
submodules: true
|
|
- uses: actions/setup-node@v2
|
|
with:
|
|
node-version: '14.17.0'
|
|
|
|
- name: Shutdown MySQL
|
|
run: sudo service mysql stop
|
|
if: matrix.DB == 'mysql'
|
|
|
|
- uses: mirromutth/mysql-action@v1.1
|
|
if: matrix.DB == 'mysql'
|
|
with:
|
|
mysql version: '5.7'
|
|
mysql database: 'ghost_testing'
|
|
mysql root password: 'root'
|
|
|
|
- run: yarn
|
|
- run: |
|
|
node index.js &
|
|
sleep 20 && { kill $! && wait $!; } 2>/dev/null
|
|
|
|
- run: yarn knex-migrator rollback --v 4.0 --force
|
|
- run: yarn knex-migrator migrate --force
|
|
|
|
test:
|
|
runs-on: ubuntu-18.04
|
|
if: github.event_name == 'push' || (github.event_name == 'pull_request' && !startsWith(github.head_ref, 'renovate/'))
|
|
strategy:
|
|
matrix:
|
|
node: [ '12.22.1', '14.17.0', '16.13.0' ]
|
|
env:
|
|
- DB: sqlite3
|
|
NODE_ENV: testing
|
|
- DB: mysql
|
|
NODE_ENV: testing-mysql
|
|
env:
|
|
DB: ${{ matrix.env.DB }}
|
|
NODE_ENV: ${{ matrix.env.NODE_ENV }}
|
|
database__connection__password: root
|
|
name: Node ${{ matrix.node }} - ${{ matrix.env.DB }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-node@v2
|
|
with:
|
|
node-version: ${{ matrix.node }}
|
|
|
|
- name: Shutdown MySQL
|
|
run: sudo service mysql stop
|
|
if: matrix.env.DB == 'mysql'
|
|
|
|
- uses: mirromutth/mysql-action@v1.1
|
|
if: matrix.env.DB == 'mysql'
|
|
with:
|
|
mysql version: '5.7'
|
|
mysql database: 'ghost_testing'
|
|
mysql root password: 'root'
|
|
|
|
- run: yarn
|
|
|
|
- run: date +%s > ${{ runner.temp }}/startTime # Get start time for test suite
|
|
|
|
- run: yarn test:e2e
|
|
env:
|
|
database__connection__filename: /dev/shm/ghost-test.db
|
|
- run: yarn test:integration
|
|
env:
|
|
database__connection__filename: /dev/shm/ghost-test.db
|
|
- run: yarn test:unit
|
|
- run: yarn test:regression
|
|
env:
|
|
database__connection__filename: /dev/shm/ghost-test.db
|
|
|
|
# Get runtime in seconds for test suite
|
|
- run: |
|
|
startTime="$(cat ${{ runner.temp }}/startTime)"
|
|
endTime="$(date +%s)"
|
|
echo "test_time=$(($endTime-$startTime))" >> $GITHUB_ENV
|
|
|
|
- name: Tailscale Action
|
|
uses: tailscale/github-action@v1
|
|
with:
|
|
authkey: ${{ secrets.TAILSCALE_AUTHKEY }}
|
|
|
|
# Report time taken to metrics service
|
|
- uses: sam-lord/action-trigger-metric@main
|
|
with:
|
|
metricName: 'test-time'
|
|
metricValue: ${{ env.test_time }}
|
|
configuration: |
|
|
{
|
|
"metrics": {
|
|
"transports": ["elasticsearch"],
|
|
"metadata": {
|
|
"database": "${{ matrix.env.DB }}",
|
|
"node": "${{ matrix.node }}"
|
|
}
|
|
},
|
|
"elasticsearch": {
|
|
"host": "${{ secrets.ELASTICSEARCH_HOST }}",
|
|
"username": "${{ secrets.ELASTICSEARCH_USERNAME }}",
|
|
"password": "${{ secrets.ELASTICSEARCH_PASSWORD }}"
|
|
}
|
|
}
|
|
|
|
- name: Unit test coverage
|
|
run: yarn cov:unit
|
|
- uses: codecov/codecov-action@v2
|
|
|
|
- uses: daniellockyer/action-slack-build@master
|
|
if: failure() && github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
with:
|
|
status: ${{ job.status }}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
|
|
ghost-cli:
|
|
name: Ghost-CLI
|
|
if: github.event_name == 'push' || (github.event_name == 'pull_request' && !startsWith(github.head_ref, 'renovate/'))
|
|
runs-on: ubuntu-18.04
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
submodules: true
|
|
- uses: actions/setup-node@v2
|
|
with:
|
|
node-version: '12.22.1'
|
|
- run: npm install -g ghost-cli@latest
|
|
- run: npm --no-git-tag-version version minor # We need to artificially bump the minor version to get migrations to run
|
|
|
|
- run: zip -r ghost.zip .
|
|
|
|
- name: Clean Install
|
|
run: |
|
|
DIR=$(mktemp -d)
|
|
ghost install local -d $DIR --zip $GITHUB_WORKSPACE/ghost.zip
|
|
|
|
- name: Latest Release
|
|
run: |
|
|
DIR=$(mktemp -d)
|
|
ghost install local -d $DIR
|
|
ghost update -d $DIR --zip $GITHUB_WORKSPACE/ghost.zip
|
|
|
|
#- name: Update from latest v1
|
|
#run: |
|
|
#DIR=$(mktemp -d)
|
|
#ghost install v1 --local -d $DIR
|
|
#ghost update -f -d $DIR --zip $GITHUB_WORKSPACE/ghost.zip
|
|
|
|
#- name: Update from latest v2
|
|
#run: |
|
|
#DIR=$(mktemp -d)
|
|
#ghost install v2 --local -d $DIR
|
|
#ghost update -f -d $DIR --zip $GITHUB_WORKSPACE/ghost.zip
|
|
|
|
- name: Update from latest v3
|
|
run: |
|
|
DIR=$(mktemp -d)
|
|
ghost install v3 --local -d $DIR
|
|
ghost update -f -d $DIR --zip $GITHUB_WORKSPACE/ghost.zip
|
|
|
|
- name: Print debug logs
|
|
if: failure()
|
|
run: cat ~/.ghost/logs/*.log
|
|
|
|
- uses: daniellockyer/action-slack-build@master
|
|
if: failure() && github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
with:
|
|
status: ${{ job.status }}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
|
|
|
|
canary:
|
|
runs-on: ubuntu-18.04
|
|
needs: [lint, migrations, test, ghost-cli]
|
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
name: Canary
|
|
steps:
|
|
- name: Invoke Canary Build
|
|
uses: benc-uk/workflow-dispatch@v1
|
|
with:
|
|
workflow: Canary Build
|
|
token: ${{ secrets.RELEASE_TOKEN }}
|