DEV: Clean up and refactor CI workflow(s) (#12144)
Includes:
- DEV: Remove external plugin linting (that’s covered by CI in their repositories)
- DEV: Move lint stages to a separate workflow (partial de-
if
-ication of workflows) - DEV: Run CI on
main
branch too - DEV: Update postgres to 13
- DEV: Update redis to 6.x
Other changes:
- DEV: Remove matrix.os
- DEV: Remove env.BUILD_TYPE
- DEV: Remove env.TARGET
- DEV: Rename
build_types
config option tobuild_type
- DEV: Lowercase
target
andbuild_type
names - DEV: Rename
ci
totests
- DEV: Rename
lint
tolinting
- DEV: Lower the wizard qunit timeout (30 min → 10)
- DEV: Ruby version is no longer configurable
- DEV: Run plugin tests only in the
plugins
target - DEV: Use binstubs where applicable
- DEV: We don’t open PRs to
tests-passed
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 8c1b8ef..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,201 +0,0 @@
-name: CI
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches-ignore:
- - "tests-passed"
-
-jobs:
- build:
- name: "${{ matrix.target }}-${{ matrix.build_types }}"
- runs-on: ${{ matrix.os }}
- container: discourse/discourse_test:release
- timeout-minutes: 60
-
- env:
- DISCOURSE_HOSTNAME: www.example.com
- RUBY_GLOBAL_METHOD_CACHE_SIZE: 131072
- BUILD_TYPE: ${{ matrix.build_types }}
- TARGET: ${{ matrix.target }}
- RAILS_ENV: test
- PGHOST: postgres
- PGUSER: discourse
- PGPASSWORD: discourse
-
- strategy:
- fail-fast: false
-
- matrix:
- build_types: ["BACKEND", "FRONTEND", "LINT"]
- target: ["PLUGINS", "CORE"]
- os: [ubuntu-latest]
- ruby: ["2.6"]
- postgres: ["12"]
- redis: ["4.x"]
-
- services:
- postgres:
- image: postgres:${{ matrix.postgres }}
- ports:
- - 5432:5432
- env:
- POSTGRES_USER: discourse
- POSTGRES_PASSWORD: discourse
- POSTGRES_DB: discourse_test
- options: >-
- --mount type=tmpfs,destination=/var/lib/postgresql/data
- --health-cmd pg_isready
- --health-interval 10s
- --health-timeout 5s
- --health-retries 5
-
- steps:
- - uses: actions/checkout@master
- with:
- fetch-depth: 1
-
- - name: Setup Git
- run: |
- git config --global user.email "ci@ci.invalid"
- git config --global user.name "Discourse CI"
-
- - name: Setup redis
- uses: shogo82148/actions-setup-redis@v1
- if: env.BUILD_TYPE != 'LINT'
- with:
- redis-version: ${{ matrix.redis }}
-
- - name: Bundler cache
- uses: actions/cache@v2
- with:
- path: vendor/bundle
- key: ${{ runner.os }}-${{ matrix.ruby }}-gem-${{ hashFiles('**/Gemfile.lock') }}
- restore-keys: |
- ${{ runner.os }}-${{ matrix.ruby }}-gem-
-
- - name: Setup gems
- run: |
- bundle config --local path vendor/bundle
- bundle config --local deployment true
- bundle config --local without development
- bundle install --jobs 4
- bundle clean
-
- - name: Get yarn cache directory
- id: yarn-cache-dir
- run: echo "::set-output name=dir::$(yarn cache dir)"
-
- - name: Yarn cache
- uses: actions/cache@v2
- id: yarn-cache
- with:
- path: ${{ steps.yarn-cache-dir.outputs.dir }}
- key: ${{ runner.os }}-${{ matrix.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-${{ matrix.os }}-yarn-
-
- - name: Yarn install
- run: yarn install
-
- - name: "Checkout official plugins"
- if: env.TARGET == 'PLUGINS'
- run: bin/rake plugin:install_all_official
-
- - name: Create database
- if: env.BUILD_TYPE != 'LINT'
- run: |
- bin/rake db:create
- bin/rake db:migrate
-
- - name: Create parallel databases
- if: env.BUILD_TYPE == 'BACKEND' && env.TARGET == 'CORE'
- run: |
- bin/rake parallel:create
- bin/rake parallel:migrate
-
- - name: Rubocop (core and core plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'CORE'
- run: bundle exec rubocop .
-
- - name: Rubocop (all plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'PLUGINS'
- run: bundle exec rubocop plugins
-
- - name: ESLint (core)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'CORE'
- run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern app/assets/javascripts
-
- - name: ESLint (core plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'CORE'
- run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern plugins/**/{test,assets}/javascripts
-
- - name: ESLint (all plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'PLUGINS'
- run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern plugins/**/{test,assets}/javascripts
-
- - name: Prettier (core and core plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'CORE'
- run: |
- yarn prettier -v
- yarn prettier --list-different \
- "app/assets/stylesheets/**/*.scss" \
- "app/assets/javascripts/**/*.{js,es6}" \
- "plugins/**/assets/stylesheets/**/*.scss" \
- "plugins/**/assets/javascripts/**/*.{js,es6}"
-
- - name: Prettier (all plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'PLUGINS'
- run: |
- yarn prettier -v
- yarn prettier --list-different \
- "plugins/**/assets/stylesheets/**/*.scss" \
- "plugins/**/assets/javascripts/**/*.{js,es6}"
-
- - name: Ember template lint (core and core plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'CORE'
- run: |
- yarn ember-template-lint \
- app/assets/javascripts \
- plugins/**/assets/javascripts
-
- - name: Ember template lint (all plugins)
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'PLUGINS'
- run: |
- yarn ember-template-lint \
- plugins/**/assets/javascripts
-
- - name: Core English locale
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'CORE'
- run: bundle exec ruby script/i18n_lint.rb "config/**/locales/{client,server}.en.yml"
-
- - name: Plugin English locale
- if: env.BUILD_TYPE == 'LINT' && env.TARGET == 'PLUGINS'
- run: bundle exec ruby script/i18n_lint.rb "plugins/**/locales/{client,server}.en.yml"
-
- - name: Core RSpec
- if: env.BUILD_TYPE == 'BACKEND' && env.TARGET == 'CORE'
- run: |
- bin/turbo_rspec
- bin/rake plugin:spec
-
- - name: Plugin RSpec
- if: env.BUILD_TYPE == 'BACKEND' && env.TARGET == 'PLUGINS'
- run: bin/rake plugin:spec
-
- - name: Core QUnit
- if: env.BUILD_TYPE == 'FRONTEND' && env.TARGET == 'CORE'
- run: bundle exec rake qunit:test['1200000']
- timeout-minutes: 30
-
- - name: Wizard QUnit
- if: env.BUILD_TYPE == 'FRONTEND' && env.TARGET == 'CORE'
- run: bundle exec rake qunit:test['1200000','/wizard/qunit']
- timeout-minutes: 30
-
- - name: Plugin QUnit # Tests core plugins in TARGET=CORE, and all plugins in TARGET=PLUGINS
- if: env.BUILD_TYPE == 'FRONTEND'
- run: bundle exec rake plugin:qunit['*','1200000']
- timeout-minutes: 30
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
new file mode 100644
index 0000000..c277b00
--- /dev/null
+++ b/.github/workflows/linting.yml
@@ -0,0 +1,87 @@
+name: Linting
+
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+ - main
+
+jobs:
+ build:
+ name: run
+ runs-on: ubuntu-latest
+ container: discourse/discourse_test:release
+ timeout-minutes: 30
+
+ steps:
+ - uses: actions/checkout@master
+ with:
+ fetch-depth: 1
+
+ - name: Setup Git
+ run: |
+ git config --global user.email "ci@ci.invalid"
+ git config --global user.name "Discourse CI"
+
+ - name: Bundler cache
+ uses: actions/cache@v2
+ with:
+ path: vendor/bundle
+ key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-gem-
+
+ - name: Setup gems
+ run: |
+ bundle config --local path vendor/bundle
+ bundle config --local deployment true
+ bundle config --local without development
+ bundle install --jobs 4
[... diff too long, it was truncated ...]
GitHub sha: a60e26e7