Spiegel von
https://github.com/paviliondev/discourse-custom-wizard.git
synchronisiert 2024-11-21 17:00:29 +01:00
Added files used by github actions workflows (#78)
* Added files used by github actions workflows * added simplecov report for tests workflow * removed trailing space * Rubocop fixes * Update plugin-linting.yml * Create Gemfile.lock * Update Gemfile.lock * Re-add bundler * Update gitignore * Limit yarn install to dev * Update rubocop config and gemfile.lock * allow strings to be mutated * Update invites_controller_spec.rb Co-authored-by: angusmcleod <angus@mcleod.org.au>
Dieser Commit ist enthalten in:
Ursprung
d7542d58c7
Commit
b71548427d
18 geänderte Dateien mit 273 neuen und 13 gelöschten Zeilen
3
.eslintrc
Normale Datei
3
.eslintrc
Normale Datei
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"extends": "eslint-config-discourse"
|
||||||
|
}
|
53
.github/workflows/plugin-linting.yml
gevendort
Normale Datei
53
.github/workflows/plugin-linting.yml
gevendort
Normale Datei
|
@ -0,0 +1,53 @@
|
||||||
|
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
|
||||||
|
|
||||||
|
- 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 {test,assets}/javascripts
|
||||||
|
|
||||||
|
- name: Prettier
|
||||||
|
run: |
|
||||||
|
yarn prettier -v
|
||||||
|
if [ -d "assets" ]; then \
|
||||||
|
yarn prettier --list-different "assets/**/*.{scss,js,es6}" ; \
|
||||||
|
fi
|
||||||
|
if [ -d "test" ]; then \
|
||||||
|
yarn prettier --list-different "test/**/*.{js,es6}" ; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Ember template lint
|
||||||
|
run: yarn ember-template-lint assets/javascripts
|
||||||
|
|
||||||
|
- name: Rubocop
|
||||||
|
run: bundle exec rubocop .
|
137
.github/workflows/plugin-tests.yml
gevendort
Normale Datei
137
.github/workflows/plugin-tests.yml
gevendort
Normale Datei
|
@ -0,0 +1,137 @@
|
||||||
|
name: Plugin Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: ${{ matrix.build_type }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 60
|
||||||
|
|
||||||
|
env:
|
||||||
|
DISCOURSE_HOSTNAME: www.example.com
|
||||||
|
RUBY_GLOBAL_METHOD_CACHE_SIZE: 131072
|
||||||
|
RAILS_ENV: test
|
||||||
|
PGHOST: localhost
|
||||||
|
PGUSER: discourse
|
||||||
|
PGPASSWORD: discourse
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
build_type: ["backend", "frontend"]
|
||||||
|
ruby: ["2.7"]
|
||||||
|
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@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: 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: matrix.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: ruby/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: ${{ matrix.ruby }}
|
||||||
|
bundler-cache: true
|
||||||
|
|
||||||
|
- 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 --dev
|
||||||
|
|
||||||
|
- name: Migrate database
|
||||||
|
run: |
|
||||||
|
bin/rake db:create
|
||||||
|
bin/rake db:migrate
|
||||||
|
|
||||||
|
- name: Plugin RSpec
|
||||||
|
if: matrix.build_type == 'backend' && steps.check_spec.outputs.files_exists == 'true'
|
||||||
|
run: bin/rake plugin:spec[${{ github.event.repository.name }}]
|
||||||
|
|
||||||
|
- name: Plugin QUnit
|
||||||
|
if: matrix.build_type == 'frontend' && steps.check_qunit.outputs.files_exists == 'true'
|
||||||
|
run: bundle exec rake plugin:qunit['${{ github.event.repository.name }}','1200000']
|
||||||
|
timeout-minutes: 30
|
||||||
|
|
||||||
|
- name: Simplecov Report
|
||||||
|
if: matrix.build_type == 'backend'
|
||||||
|
run: COVERAGE=1 bin/rake plugin:spec[${{ github.event.repository.name }}]
|
4
.gitignore
gevendort
4
.gitignore
gevendort
|
@ -1,3 +1,7 @@
|
||||||
coverage/*
|
coverage/*
|
||||||
!coverage/.last_run.json
|
!coverage/.last_run.json
|
||||||
gems/
|
gems/
|
||||||
|
.bundle/
|
||||||
|
auto_generated
|
||||||
|
.DS_Store
|
||||||
|
node_modules/
|
||||||
|
|
1
.prettierrc
Normale Datei
1
.prettierrc
Normale Datei
|
@ -0,0 +1 @@
|
||||||
|
{}
|
2
.rubocop.yml
Normale Datei
2
.rubocop.yml
Normale Datei
|
@ -0,0 +1,2 @@
|
||||||
|
inherit_gem:
|
||||||
|
rubocop-discourse: default.yml
|
4
.template-lintrc.js
Normale Datei
4
.template-lintrc.js
Normale Datei
|
@ -0,0 +1,4 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: ["ember-template-lint-plugin-discourse"],
|
||||||
|
extends: "discourse:recommended",
|
||||||
|
};
|
7
Gemfile
Normale Datei
7
Gemfile
Normale Datei
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
group :development do
|
||||||
|
gem 'rubocop-discourse'
|
||||||
|
end
|
38
Gemfile.lock
Normale Datei
38
Gemfile.lock
Normale Datei
|
@ -0,0 +1,38 @@
|
||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
ast (2.4.2)
|
||||||
|
parallel (1.20.1)
|
||||||
|
parser (3.0.1.0)
|
||||||
|
ast (~> 2.4.1)
|
||||||
|
rainbow (3.0.0)
|
||||||
|
regexp_parser (2.1.1)
|
||||||
|
rexml (3.2.5)
|
||||||
|
rubocop (1.12.1)
|
||||||
|
parallel (~> 1.10)
|
||||||
|
parser (>= 3.0.0.0)
|
||||||
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
|
regexp_parser (>= 1.8, < 3.0)
|
||||||
|
rexml
|
||||||
|
rubocop-ast (>= 1.2.0, < 2.0)
|
||||||
|
ruby-progressbar (~> 1.7)
|
||||||
|
unicode-display_width (>= 1.4.0, < 3.0)
|
||||||
|
rubocop-ast (1.4.1)
|
||||||
|
parser (>= 2.7.1.5)
|
||||||
|
rubocop-discourse (2.4.1)
|
||||||
|
rubocop (>= 1.1.0)
|
||||||
|
rubocop-rspec (>= 2.0.0)
|
||||||
|
rubocop-rspec (2.2.0)
|
||||||
|
rubocop (~> 1.0)
|
||||||
|
rubocop-ast (>= 1.1.0)
|
||||||
|
ruby-progressbar (1.11.0)
|
||||||
|
unicode-display_width (2.0.0)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
rubocop-discourse
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
2.2.16
|
|
@ -1,5 +1,5 @@
|
||||||
{{#if isValid}}
|
{{#if isValid}}
|
||||||
{{wizard-i18n validMessageKey}}
|
{{wizard-i18n validMessageKey}}
|
||||||
{{else}}
|
{{else}}
|
||||||
{{wizard-i18n invalidMessageKey}}
|
{{wizard-i18n invalidMessageKey}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -307,15 +307,15 @@ class CustomWizard::Action
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
groups = group_map.reduce([]) do |groups, g|
|
groups = group_map.reduce([]) do |result, g|
|
||||||
begin
|
begin
|
||||||
groups.push(Integer(g))
|
result.push(Integer(g))
|
||||||
rescue ArgumentError
|
rescue ArgumentError
|
||||||
group = Group.find_by(name: g)
|
group = Group.find_by(name: g)
|
||||||
groups.push(group.id) if group
|
result.push(group.id) if group
|
||||||
end
|
end
|
||||||
|
|
||||||
groups
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
result = nil
|
result = nil
|
||||||
|
|
|
@ -74,7 +74,7 @@ class CustomWizard::Api::Endpoint
|
||||||
headers["Authorization"] = auth_string if auth_string
|
headers["Authorization"] = auth_string if auth_string
|
||||||
headers["Content-Type"] = content_type if content_type
|
headers["Content-Type"] = content_type if content_type
|
||||||
|
|
||||||
connection = Excon.new(URI.parse(URI.encode(endpoint.url)).to_s, headers: headers)
|
connection = Excon.new(UrlHelper.encode_and_parse(endpoint.url), headers: headers)
|
||||||
|
|
||||||
params = { method: endpoint.method }
|
params = { method: endpoint.method }
|
||||||
|
|
||||||
|
|
10
package.json
Normale Datei
10
package.json
Normale Datei
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "discourse-custom-wizard",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"repository": "git@github.com:paviliondev/discourse-custom-wizard.git",
|
||||||
|
"author": "Discourse",
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"eslint-config-discourse": "^1.1.8"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
require_relative '../../plugin_helper'
|
require_relative '../../plugin_helper'
|
||||||
|
|
||||||
describe CustomWizard::Action do
|
describe CustomWizard::Action do
|
||||||
|
@ -121,8 +122,8 @@ describe CustomWizard::Action do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'encodes special characters in the title and body' do
|
it 'encodes special characters in the title and body' do
|
||||||
open_composer['title'][0]['output'] = "Title that's special $"
|
open_composer['title'][0]['output'] = "Title that's special $".dup
|
||||||
open_composer['post_template'] = "Body & more body & more body"
|
open_composer['post_template'] = "Body & more body & more body".dup
|
||||||
|
|
||||||
wizard = CustomWizard::Wizard.new(@template, user)
|
wizard = CustomWizard::Wizard.new(@template, user)
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
require_relative '../../plugin_helper'
|
require_relative '../../plugin_helper'
|
||||||
|
|
||||||
describe CustomWizard::Builder do
|
describe CustomWizard::Builder do
|
||||||
|
|
|
@ -5,7 +5,6 @@ require_relative '../../../plugin_helper'
|
||||||
describe ::CustomWizard::RealtimeValidation::SimilarTopics do
|
describe ::CustomWizard::RealtimeValidation::SimilarTopics do
|
||||||
let(:post) { create_post(title: "matching similar topic") }
|
let(:post) { create_post(title: "matching similar topic") }
|
||||||
let(:topic) { post.topic }
|
let(:topic) { post.topic }
|
||||||
let(:user) { post.user }
|
|
||||||
|
|
||||||
let(:category) { Fabricate(:category) }
|
let(:category) { Fabricate(:category) }
|
||||||
let(:cat_post) { create_post(title: "matching similar topic slightly different", category: category) }
|
let(:cat_post) { create_post(title: "matching similar topic slightly different", category: category) }
|
||||||
|
|
|
@ -98,7 +98,7 @@ describe CustomWizard::Wizard do
|
||||||
CustomWizard::Wizard.new(@permitted_template, trusted_user).permitted?
|
CustomWizard::Wizard.new(@permitted_template, trusted_user).permitted?
|
||||||
).to eq(true)
|
).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "permits everyone if everyone is permitted" do
|
it "permits everyone if everyone is permitted" do
|
||||||
@permitted_template['permitted'][0]['output'] = Group::AUTO_GROUPS[:everyone]
|
@permitted_template['permitted'][0]['output'] = Group::AUTO_GROUPS[:everyone]
|
||||||
expect(
|
expect(
|
||||||
|
@ -185,7 +185,7 @@ describe CustomWizard::Wizard do
|
||||||
).to eq('I am a user submission')
|
).to eq('I am a user submission')
|
||||||
end
|
end
|
||||||
|
|
||||||
context do
|
context "class methods" do
|
||||||
before do
|
before do
|
||||||
CustomWizard::Template.save(@permitted_template, skip_jobs: true)
|
CustomWizard::Template.save(@permitted_template, skip_jobs: true)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ require_relative '../plugin_helper'
|
||||||
describe InvitesControllerCustomWizard, type: :request do
|
describe InvitesControllerCustomWizard, type: :request do
|
||||||
fab!(:topic) { Fabricate(:topic) }
|
fab!(:topic) { Fabricate(:topic) }
|
||||||
let(:invite) { Invite.generate(topic.user, email: "angus@mcleod.org", topic: topic) }
|
let(:invite) { Invite.generate(topic.user, email: "angus@mcleod.org", topic: topic) }
|
||||||
|
|
||||||
let(:template) do
|
let(:template) do
|
||||||
JSON.parse(File.open(
|
JSON.parse(File.open(
|
||||||
"#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/wizard.json"
|
"#{Rails.root}/plugins/discourse-custom-wizard/spec/fixtures/wizard.json"
|
||||||
|
@ -19,6 +19,6 @@ describe InvitesControllerCustomWizard, type: :request do
|
||||||
template['after_signup'] = true
|
template['after_signup'] = true
|
||||||
CustomWizard::Template.save(template, skip_jobs: true)
|
CustomWizard::Template.save(template, skip_jobs: true)
|
||||||
put "/invites/show/#{invite.invite_key}.json"
|
put "/invites/show/#{invite.invite_key}.json"
|
||||||
expect(response.parsed_body["redirect_to"]).to eq("/w/super-mega-fun-wizard")
|
expect(cookies[:destination_url]).to eq("/w/super-mega-fun-wizard")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Laden …
In neuem Issue referenzieren