150 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
| name: Plugin Tests
 | |
| 
 | |
| on:
 | |
|   push:
 | |
|     branches:
 | |
|       - main
 | |
|   pull_request:
 | |
| 
 | |
| jobs:
 | |
|   build:
 | |
|     name: ${{ matrix.build_type }}
 | |
|     runs-on: ubuntu-latest
 | |
|     container: discourse/discourse_test:slim${{ matrix.build_type == 'frontend' && '-browsers' || '' }}
 | |
|     timeout-minutes: 60
 | |
| 
 | |
|     env:
 | |
|       DISCOURSE_HOSTNAME: www.example.com
 | |
|       RUBY_GLOBAL_METHOD_CACHE_SIZE: 131072
 | |
|       RAILS_ENV: test
 | |
|       PGUSER: discourse
 | |
|       PGPASSWORD: discourse
 | |
| 
 | |
|     strategy:
 | |
|       fail-fast: false
 | |
| 
 | |
|       matrix:
 | |
|         build_type: ["backend", "frontend"]
 | |
| 
 | |
|     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: Start redis
 | |
|         run: |
 | |
|           redis-server /etc/redis/redis.conf &          
 | |
|       
 | |
|       - name: Start Postgres
 | |
|         run: |
 | |
|           chown -R postgres /var/run/postgresql
 | |
|           sudo -E -u postgres script/start_test_db.rb
 | |
|           sudo -u postgres psql -c "CREATE ROLE $PGUSER LOGIN SUPERUSER PASSWORD '$PGPASSWORD';"          
 | |
| 
 | |
|       - 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
 | |
|           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 }}-yarn-${{ hashFiles('**/yarn.lock') }}
 | |
|           restore-keys: |
 | |
|             ${{ runner.os }}-yarn-            
 | |
| 
 | |
|       - name: Yarn install
 | |
|         run: yarn install
 | |
| 
 | |
|       - name: Fetch app state cache
 | |
|         uses: actions/cache@v2
 | |
|         id: app-cache
 | |
|         with:
 | |
|           path: tmp/app-cache
 | |
|           key: >- # postgres version, hash of migrations, "parallel?"
 | |
|             ${{ runner.os }}-
 | |
|             ${{ hashFiles('.github/workflows/tests.yml') }}-
 | |
|             ${{ matrix.postgres }}-
 | |
|             ${{ hashFiles('db/**/*', 'plugins/**/db/**/*') }}-
 | |
|             ${{ env.USES_PARALLEL_DATABASES }}
 | |
| 
 | |
|       - name: Restore database from cache
 | |
|         if: steps.app-cache.outputs.cache-hit == 'true'
 | |
|         run: psql -f tmp/app-cache/cache.sql postgres
 | |
| 
 | |
|       - name: Restore uploads from cache
 | |
|         if: steps.app-cache.outputs.cache-hit == 'true'
 | |
|         run: rm -rf public/uploads && cp -r tmp/app-cache/uploads public/uploads
 | |
| 
 | |
|       - name: Create and migrate database
 | |
|         if: steps.app-cache.outputs.cache-hit != 'true'
 | |
|         run: |
 | |
|           bin/rake db:create
 | |
|           bin/rake db:migrate          
 | |
| 
 | |
|       - name: Dump database for cache
 | |
|         if: steps.app-cache.outputs.cache-hit != 'true'
 | |
|         run: mkdir -p tmp/app-cache && pg_dumpall > tmp/app-cache/cache.sql
 | |
| 
 | |
|       - name: Dump uploads for cache
 | |
|         if: steps.app-cache.outputs.cache-hit != 'true'
 | |
|         run: rm -rf tmp/app-cache/uploads && cp -r public/uploads tmp/app-cache/uploads
 | |
| 
 | |
|       - name: Check spec existence
 | |
|         id: check_spec
 | |
|         shell: bash
 | |
|         run: |
 | |
|           if [ 0 -lt $(find plugins/${{ github.event.repository.name }}/spec -type f -name "*.rb" 2> /dev/null | wc -l) ]; 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: |
 | |
|           if [ 0 -lt $(find plugins/${{ github.event.repository.name }}/test/javascripts -type f \( -name "*.js" -or -name "*.es6" \) 2> /dev/null | wc -l) ]; 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
 |