DEV: Add prettier, eslint, rubocop, github action config and lint files (#4)

DEV: Add prettier, eslint, rubocop, github action config and lint files (#4)

Co-authored-by: Joffrey JAFFEUX j.jaffeux@gmail.com

diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..75bcf55
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,2 @@
+support/*
+public/*
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 0000000..7898fbf
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,3 @@
+{
+  "extends": "eslint-config-discourse"
+}
diff --git a/.github/workflows/plugin-linting.yml b/.github/workflows/plugin-linting.yml
new file mode 100644
index 0000000..5a20ec2
--- /dev/null
+++ b/.github/workflows/plugin-linting.yml
@@ -0,0 +1,41 @@
+name: Linting
+
+on: [push, 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: actions/setup-ruby@v1
+      with:
+        ruby-version: 2.7
+
+    - name: Setup bundler
+      run: gem install bundler -v 2.1.4 --no-doc
+
+    - name: Setup gems
+      run: bundle install --jobs 4
+
+    - name: Yarn install
+      run: yarn install --dev
+
+    - name: ESLint
+      run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern assets/javascripts
+
+    - name: Prettier
+      run: |
+        yarn prettier -v
+        yarn prettier --list-different \
+          "assets/**/*.{scss,js,es6}"
+
+    - name: Rubocop
+      run: bundle exec rubocop .
diff --git a/.github/workflows/plugin-tests.yml b/.github/workflows/plugin-tests.yml
new file mode 100644
index 0000000..fb2afda
--- /dev/null
+++ b/.github/workflows/plugin-tests.yml
@@ -0,0 +1,162 @@
+name: Plugin Tests
+
+on: [push, pull_request]
+
+jobs:
+  build:
+    name: "${{ matrix.target }}-${{ matrix.build_types }}"
+    runs-on: ${{ matrix.os }}
+    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: localhost
+      PGUSER: discourse
+      PGPASSWORD: discourse
+
+    strategy:
+      fail-fast: false
+
+      matrix:
+        build_types: ["BACKEND", "FRONTEND"]
+        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
+        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:
+          repository: discourse/discourse
+          fetch-depth: 1
+
+      - name: Install plugin
+        uses: actions/checkout@master
+        with:
+          path: plugins/${{ github.event.repository.name }}
+          fetch-depth: 1
+
+      - name: Check spec existence
+        id: check_spec
+        uses: andstor/file-existence-action@v1
+        with:
+          files: "plugins/${{ github.event.repository.name }}/spec"
+
+      - name: Check qunit existence
+        id: check_qunit
+        uses: andstor/file-existence-action@v1
+        with:
+          files: "plugins/${{ github.event.repository.name }}/test/javascripts"
+
+      - name: Setup Git
+        run: |
+          git config --global user.email "ci@ci.invalid"
+          git config --global user.name "Discourse CI"
+
+      - name: Setup packages
+        run: |
+          sudo apt-get update
+          sudo apt-get -yqq install postgresql-client libpq-dev gifsicle jpegoptim optipng jhead
+          wget -qO- https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-pngquant | sudo sh
+
+      - name: Update imagemagick
+        if: env.BUILD_TYPE == 'BACKEND'
+        run: |
+          wget https://raw.githubusercontent.com/discourse/discourse_docker/master/image/base/install-imagemagick
+          chmod +x install-imagemagick
+          sudo ./install-imagemagick
+
+      - name: Setup redis
+        uses: shogo82148/actions-setup-redis@v1
+        with:
+          redis-version: ${{ matrix.redis }}
+
+      - name: Setup ruby
+        uses: actions/setup-ruby@v1
+        with:
+          ruby-version: ${{ matrix.ruby }}
+
+      - name: Setup bundler
+        run: |
+          gem install bundler -v 2.1.4 --no-doc
+          bundle config deployment 'true'
+          bundle config without 'development'
+
+      - name: Bundler cache
+        uses: actions/cache@v1
+        id: bundler-cache
+        with:
+          path: vendor/bundle
+          key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
+          restore-keys: |
+            ${{ runner.os }}-gem-
+
+      - name: Setup gems
+        run: bundle install --jobs 4
+
+      - name: Get yarn cache directory
+        id: yarn-cache-dir
+        run: echo "::set-output name=dir::$(yarn cache dir)"
+
+      - name: Yarn cache
+        uses: actions/cache@v1
+        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 --dev
+
+      - name: Migrate database
+        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: 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' && steps.check_spec.outputs.files_exists == 'true'
+        run: bin/rake plugin:spec[${{ github.event.repository.name }}]
+
+      - name: Core QUnit
+        if: env.BUILD_TYPE == 'FRONTEND' && env.TARGET == 'CORE'
+        run: bundle exec rake qunit:test['1200000']
+        timeout-minutes: 30
+
+      - name: Plugin QUnit
+        if: env.BUILD_TYPE == 'FRONTEND' && env.TARGET == 'PLUGINS' && steps.check_qunit.outputs.files_exists == 'true'
+        run: bundle exec rake plugin:qunit['${{ github.event.repository.name }}','1200000']
+        timeout-minutes: 30
diff --git a/.gitignore b/.gitignore
index 3f83bff..383305b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,5 @@
 support/text-unicode-webpack/node_modules/*
 tmp/*
+node_modules
+yarn-error.log
+.rubocop-https---raw-githubusercontent-com-discourse-*
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..75bcf55
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,2 @@
+support/*
+public/*
\ No newline at end of file
diff --git a/.rubocop.yml b/.rubocop.yml
new file mode 100644
index 0000000..d46296c
--- /dev/null
+++ b/.rubocop.yml
@@ -0,0 +1,2 @@
+inherit_gem:
+  rubocop-discourse: default.yml
diff --git a/.template-lintrc.js b/.template-lintrc.js
new file mode 100644
index 0000000..a558b8e
--- /dev/null
+++ b/.template-lintrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+  plugins: ["ember-template-lint-plugin-discourse"],
+  extends: "discourse:recommended",
+};
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..7da32ec
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,7 @@
+# frozen_string_literal: true
+
+source 'https://rubygems.org'
+
+group :development do
+  gem 'rubocop-discourse'
+end
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000..b1b315c
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,37 @@
+GEM
+  remote: https://rubygems.org/
+  specs:

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

GitHub sha: d1761879

This commit appears in #4 which was approved by SamSaffron and jjaffeux. It was merged by davidtaylorhq.