DEV: Clean up and refactor CI workflow(s) (#12144)

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 to build_type
  • DEV: Lowercase target and build_type names
  • DEV: Rename ci to tests
  • DEV: Rename lint to linting
  • 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

1 Like

This commit appears in #12144 which was approved by eviltrout and pmusaraj. It was merged by CvX.