DEV: Add CI workflows (#10)

DEV: Add CI workflows (#10)

  • DEV: Update package.json
  • DEV: Clean up .gitignore
  • DEV: Remove .eslintignore
  • DEV: Add .prettierrc
  • DEV: Add rubocop/Gemfile
  • DEV: Fix rubocop issues
  • DEV: Use @computed
  • DEV: Whitespace
  • DEV: Add workflows
  • DEV: Fix bundler platforms
  • DEV: Use discourse-common/utils/decorators
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 1806ae7..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1,15 +0,0 @@
-app/assets/javascripts/env.js
-app/assets/javascripts/main_include_admin.js
-app/assets/javascripts/vendor.js
-app/assets/javascripts/locales/i18n.js
-app/assets/javascripts/ember-addons/
-app/assets/javascripts/discourse/lib/autosize.js.es6
-lib/javascripts/locale/
-lib/javascripts/messageformat.js
-lib/highlight_js/
-plugins/**/lib/javascripts/locale
-public/javascripts/
-vendor/
-test/javascripts/test_helper.js
-test/javascripts/fixtures
-test/javascripts/helpers/assertions.js
diff --git a/.github/workflows/plugin-linting.yml b/.github/workflows/plugin-linting.yml
new file mode 100644
index 0000000..51b9b82
--- /dev/null
+++ b/.github/workflows/plugin-linting.yml
@@ -0,0 +1,54 @@
+name: Linting
+
+on:
+  push:
+    branches:
+      - master
+      - main
+  pull_request:
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - name: Set up Node.js
+        uses: actions/setup-node@v1
+        with:
+          node-version: 12
+
+      - name: Set up ruby
+        uses: ruby/setup-ruby@v1
+        with:
+          ruby-version: 2.7
+          bundler-cache: true
+
+      - name: Yarn install
+        run: yarn install
+
+      - name: ESLint
+        if: ${{ always() }}
+        run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern {test,assets}/javascripts
+
+      - name: Prettier
+        if: ${{ always() }}
+        shell: bash
+        run: |
+          yarn prettier -v
+          shopt -s extglob
+          if ls assets/**/*.@(scss|js|es6) &> /dev/null; then
+            yarn prettier --list-different "assets/**/*.{scss,js,es6}"
+          fi
+          if ls test/**/*.@(js|es6) &> /dev/null; then
+            yarn prettier --list-different "test/**/*.{js,es6}"
+          fi
+
+      - name: Ember template lint
+        if: ${{ always() }}
+        run: yarn ember-template-lint assets/javascripts
+
+      - name: Rubocop
+        if: ${{ always() }}
+        run: bundle exec rubocop .
diff --git a/.github/workflows/plugin-tests.yml b/.github/workflows/plugin-tests.yml
new file mode 100644
index 0000000..b28d0e2
--- /dev/null
+++ b/.github/workflows/plugin-tests.yml
@@ -0,0 +1,137 @@
+name: Plugin Tests
+
+on:
+  push:
+    branches:
+      - master
+      - main
+  pull_request:
+
+jobs:
+  build:
+    name: ${{ matrix.build_type }}
+    runs-on: ubuntu-latest
+    container: discourse/discourse_test:release
+    timeout-minutes: 60
+
+    env:
+      DISCOURSE_HOSTNAME: www.example.com
+      RUBY_GLOBAL_METHOD_CACHE_SIZE: 131072
+      RAILS_ENV: test
+      PGHOST: postgres
+      PGUSER: discourse
+      PGPASSWORD: discourse
+
+    strategy:
+      fail-fast: false
+
+      matrix:
+        build_type: ["backend", "frontend"]
+        ruby: ["2.7"]
+        postgres: ["13"]
+        redis: ["4.x"]
+
+    services:
+      postgres:
+        image: postgres:${{ matrix.postgres }}
+        ports:
+          - 5432:5432
+        env:
+          POSTGRES_USER: discourse
+          POSTGRES_PASSWORD: discourse
+        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@v2
+        with:
+          repository: discourse/discourse
+          fetch-depth: 1
+
+      - name: Install plugin
+        uses: actions/checkout@v2
+        with:
+          path: plugins/${{ github.event.repository.name }}
+          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
+        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: Lint English locale
+        if: matrix.build_type == 'backend'
+        run: bundle exec ruby script/i18n_lint.rb "plugins/${{ github.event.repository.name }}/locales/{client,server}.en.yml"
+
+      - 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: Migrate database
+        run: |
+          bin/rake db:create
+          bin/rake db:migrate
+
+      - name: Check spec existence
+        id: check_spec
+        shell: bash
+        run: |
+          shopt -s extglob
+          if ls plugins/${{ github.event.repository.name }}/spec/**/*.@(rb) &> /dev/null; then
+            echo "::set-output name=files_exist::true"
+          fi
+
+      - name: Plugin RSpec
+        if: matrix.build_type == 'backend' && steps.check_spec.outputs.files_exist == 'true'
+        run: bin/rake plugin:spec[${{ github.event.repository.name }}]
+
+      - name: Check qunit existence
+        id: check_qunit
+        shell: bash
+        run: |
+          shopt -s extglob
+          if ls plugins/${{ github.event.repository.name }}/test/javascripts/**/*.@(js|es6) &> /dev/null; then
+            echo "::set-output name=files_exist::true"
+          fi
+
+      - name: Plugin QUnit
+        if: matrix.build_type == 'frontend' && steps.check_qunit.outputs.files_exist == 'true'
+        run: bundle exec rake plugin:qunit['${{ github.event.repository.name }}','1200000']
+        timeout-minutes: 30
diff --git a/.gitignore b/.gitignore
index 2c4c4c0..3c3629e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,133 +1 @@
-# See http://help.github.com/ignore-files/ for more about ignoring files.
-#
-# If you find yourself ignoring temporary files generated by your text editor
-# or operating system, you probably want to add a global ignore instead:
-#   git config --global core.excludesfile ~/.gitignore_global
-
-.DS_Store
-._.DS_Store
-dump.rdb
-
-bin/*
-
-data/
-
-.sass-cache/*
-public/csv/*
-public/plugins/*
-public/tombstone/*
-
-# Ignore bundler config
-/.bundle
-/cache
-/coverage/*
-
-/public/assets/*
-/public/tombstone/*
-/bundle/*
-
-config/discourse.pill
-config/discourse.conf
-
-# Ignore the default SQLite database and db dumps
-*.sql
-*.sql.gz
-/db/*.sqlite3
-/db/structure.sql
-/db/schema.rb
-
-# Ignore all logfiles and tempfiles.
-/log/*.log
-/tmp
-/logfile
-log/
-bootsnap-load-path-cache
-bootsnap-compile-cache/
-
-# Ignore plugins except for the bundled ones.
-/plugins/*
-!/plugins/lazy-yt/
-!/plugins/poll/
-!/plugins/discourse-details/
-!/plugins/discourse-nginx-performance-report
-!/plugins/discourse-narrative-bot
-!/plugins/discourse-presence
-!/plugins/discourse-local-dates
-/plugins/*/auto_generated/
-
-/spec/fixtures/plugins/my_plugin/auto_generated
-
-# Ignore Eclipse .project file
-/.project
-
-# Ignore Eclipse .buildpath file
-/.buildpath
-
-# Ignore byebug history
-/.byebug_history
-
-# Ignore RubyMine settings
-/.idea
-
-# Ignore gem that is copied in
-MiniProfiler/Ruby/rack-mini-profiler-2.0.1a.gem
-
-discourse.sublime-workspace
-

[... diff too long, it was truncated ...]

GitHub sha: 3dd0514f

This commit appears in #10 which was approved by eviltrout. It was merged by CvX.