name: Test Suite on: pull_request: push: branches: - master - '4.0' - 3.* - 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@v1 with: node-version: '12.10.0' - run: yarn - run: yarn lint - uses: daniellockyer/action-slack-build@master if: failure() && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/4.0') 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__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@v1 with: node-version: '12.10.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 3.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: [ '10.13.0', '12.10.0', '14.15.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@v1 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: grunt test-acceptance --verbose - run: grunt test-unit --verbose - run: grunt test-regression --verbose - uses: daniellockyer/action-slack-build@master if: failure() && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/4.0') 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@v1 with: node-version: '10.13.0' - 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: Upgrade from latest v1 run: | DIR=$(mktemp -d) ghost install v1 --local -d $DIR ghost update -f -d $DIR --zip $GITHUB_WORKSPACE/ghost.zip - name: Upgrade from latest v2 run: | DIR=$(mktemp -d) ghost install v2 --local -d $DIR ghost update -f -d $DIR --zip $GITHUB_WORKSPACE/ghost.zip - uses: daniellockyer/action-slack-build@master if: failure() && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/4.0') 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/master' || github.ref == 'refs/heads/4.0') name: Canary steps: - uses: actions/checkout@v2 with: fetch-depth: 0 submodules: true - uses: actions/setup-node@v2 with: node-version: '12.18.0' - name: Set up Git run: | git config --global pull.rebase true git config --global user.name "Ghost CI" git config --global user.email "ghost@example.com" - run: yarn - run: grunt master - run: git checkout 4.0 && yarn if: github.ref == 'refs/heads/4.0' - run: git checkout 4.0 && yarn if: github.ref == 'refs/heads/4.0' working-directory: core/client - run: echo "ghost_hash=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - run: echo "ghost_admin_hash=$(git rev-parse --short HEAD)" >> $GITHUB_ENV working-directory: core/client - run: if [ -n "$(git status --porcelain)" ]; then git add core/client content/themes/casper && git commit -m "Updated Ghost-Admin and Casper"; fi - run: npm version premajor --preid="pre.$ghost_hash.$ghost_admin_hash" if: github.ref == 'refs/heads/4.0' - run: npm version premajor --preid="pre.$ghost_hash.$ghost_admin_hash" if: github.ref == 'refs/heads/4.0' working-directory: core/client - run: npm version preminor --preid="pre.$ghost_hash.$ghost_admin_hash" if: github.ref == 'refs/heads/master' - run: npm version preminor --preid="pre.$ghost_hash.$ghost_admin_hash" if: github.ref == 'refs/heads/master' working-directory: core/client - run: grunt release --skip-update - uses: actions/upload-artifact@v2 if: github.ref == 'refs/heads/4.0' with: name: ghost-4.0-canary path: .dist/release/* retention-days: 7 - uses: actions/upload-artifact@v2 if: github.ref == 'refs/heads/master' with: name: ghost-canary path: .dist/release/* retention-days: 7