From 77f3077d622cc4896ce3ca1f2ec8583f2ff323e3 Mon Sep 17 00:00:00 2001 From: Justin DiRose Date: Fri, 25 Sep 2020 13:07:08 -0500 Subject: [PATCH] DEV: Add plugin testing workflow --- .github/workflows/plugin-tests.yml | 162 +++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 .github/workflows/plugin-tests.yml 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