DEV: Update CI workflows (#376)
Co-authored-by: discoursebuild <build@discourse.org>
This commit is contained in:
		
							parent
							
								
									224e168988
								
							
						
					
					
						commit
						964fa0f846
					
				| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
name: Discourse Plugin
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  pull_request:
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  ci:
 | 
			
		||||
    uses: discourse/.github/.github/workflows/discourse-plugin.yml@v1
 | 
			
		||||
| 
						 | 
				
			
			@ -1,71 +0,0 @@
 | 
			
		|||
name: Linting
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  pull_request:
 | 
			
		||||
 | 
			
		||||
concurrency:
 | 
			
		||||
  group: plugin-linting-${{ format('{0}-{1}', github.head_ref || github.run_number, github.job) }}
 | 
			
		||||
  cancel-in-progress: true
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v3
 | 
			
		||||
 | 
			
		||||
      - name: Set up Node.js
 | 
			
		||||
        uses: actions/setup-node@v3
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: 18
 | 
			
		||||
          cache: yarn
 | 
			
		||||
 | 
			
		||||
      - name: Yarn install
 | 
			
		||||
        run: yarn install
 | 
			
		||||
 | 
			
		||||
      - name: Set up ruby
 | 
			
		||||
        uses: ruby/setup-ruby@v1
 | 
			
		||||
        with:
 | 
			
		||||
          ruby-version: 2.7
 | 
			
		||||
          bundler-cache: true
 | 
			
		||||
 | 
			
		||||
      - name: ESLint
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        run: yarn eslint --ext .js,.js.es6 --no-error-on-unmatched-pattern {test,assets,admin/assets}/javascripts
 | 
			
		||||
 | 
			
		||||
      - name: Prettier
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        shell: bash
 | 
			
		||||
        run: |
 | 
			
		||||
          yarn prettier -v
 | 
			
		||||
          if [ 0 -lt $(find assets admin/assets -type f \( -name "*.scss" -or -name "*.js" -or -name "*.es6" -or -name "*.hbs" \) 2> /dev/null | wc -l) ]; then
 | 
			
		||||
            yarn prettier --list-different "assets/**/*.{scss,js,es6,hbs}"
 | 
			
		||||
          fi
 | 
			
		||||
          if [ 0 -lt $(find test -type f \( -name "*.js" -or -name "*.es6" \) 2> /dev/null | wc -l) ]; then
 | 
			
		||||
            yarn prettier --list-different "test/**/*.{js,es6}"
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Ember template lint
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        run: yarn ember-template-lint --no-error-on-unmatched-pattern assets/javascripts
 | 
			
		||||
 | 
			
		||||
      # Separated due to https://github.com/ember-template-lint/ember-template-lint/issues/2758
 | 
			
		||||
      - name: Ember template lint (admin)
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        run: yarn ember-template-lint --no-error-on-unmatched-pattern admin/assets/javascripts
 | 
			
		||||
 | 
			
		||||
      - name: Rubocop
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        run: bundle exec rubocop .
 | 
			
		||||
 | 
			
		||||
      - name: Syntax Tree
 | 
			
		||||
        if: ${{ !cancelled() }}
 | 
			
		||||
        run: |
 | 
			
		||||
          if test -f .streerc; then
 | 
			
		||||
            bundle exec stree check Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake')
 | 
			
		||||
          else
 | 
			
		||||
            echo "Stree config not detected for this repository. Skipping."
 | 
			
		||||
          fi
 | 
			
		||||
| 
						 | 
				
			
			@ -1,151 +0,0 @@
 | 
			
		|||
name: Plugin Tests
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
      - main
 | 
			
		||||
  pull_request:
 | 
			
		||||
 | 
			
		||||
concurrency:
 | 
			
		||||
  group: plugin-tests-${{ format('{0}-{1}', github.head_ref || github.run_number, github.job) }}
 | 
			
		||||
  cancel-in-progress: true
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    name: ${{ matrix.build_type }}
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    container: discourse/discourse_test:slim${{ startsWith(matrix.build_type, 'frontend') && '-browsers' || '' }}
 | 
			
		||||
    timeout-minutes: 30
 | 
			
		||||
 | 
			
		||||
    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@v3
 | 
			
		||||
        with:
 | 
			
		||||
          repository: discourse/discourse
 | 
			
		||||
          fetch-depth: 1
 | 
			
		||||
 | 
			
		||||
      - name: Install plugin
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
        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@v3
 | 
			
		||||
        with:
 | 
			
		||||
          path: vendor/bundle
 | 
			
		||||
          key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
 | 
			
		||||
          restore-keys: |
 | 
			
		||||
            ${{ runner.os }}-gem-
 | 
			
		||||
 | 
			
		||||
      - name: Setup gems
 | 
			
		||||
        run: |
 | 
			
		||||
          gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock)
 | 
			
		||||
          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 "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
 | 
			
		||||
 | 
			
		||||
      - name: Yarn cache
 | 
			
		||||
        uses: actions/cache@v3
 | 
			
		||||
        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@v3
 | 
			
		||||
        id: app-cache
 | 
			
		||||
        with:
 | 
			
		||||
          path: tmp/app-cache
 | 
			
		||||
          key: >-
 | 
			
		||||
            ${{ hashFiles('.github/workflows/tests.yml') }}-
 | 
			
		||||
            ${{ hashFiles('db/**/*', 'plugins/**/db/**/*') }}-
 | 
			
		||||
 | 
			
		||||
      - 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 "files_exist=true" >> $GITHUB_OUTPUT
 | 
			
		||||
          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 "files_exist=true" >> $GITHUB_OUTPUT
 | 
			
		||||
          fi
 | 
			
		||||
 | 
			
		||||
      - name: Plugin QUnit
 | 
			
		||||
        if: matrix.build_type == 'frontend' && steps.check_qunit.outputs.files_exist == 'true'
 | 
			
		||||
        run: QUNIT_EMBER_CLI=1 bundle exec rake plugin:qunit['${{ github.event.repository.name }}','1200000']
 | 
			
		||||
        timeout-minutes: 10
 | 
			
		||||
		Loading…
	
		Reference in New Issue