196 lines
8.4 KiB
YAML
196 lines
8.4 KiB
YAML
# Redmine plugin for Document Management System "Features"
|
|
#
|
|
# Karel Pičman <karel.picman@kontron.com>
|
|
#
|
|
# This file is part of Redmine DMSF plugin.
|
|
#
|
|
# Redmine DMSF plugin is free software: you can redistribute it and/or modify it under the terms of the GNU General
|
|
# Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any
|
|
# later version.
|
|
#
|
|
# Redmine DMSF plugin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
# more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with Redmine DMSF plugin. If not, see
|
|
# <https://www.gnu.org/licenses/>.
|
|
|
|
# GitHub CI script
|
|
|
|
name: "GitHub CI"
|
|
on:
|
|
push:
|
|
branches: ["active_storage"]
|
|
pull_request:
|
|
branches: ["active_storage"]
|
|
jobs:
|
|
plugin_tests:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
engine: [mysql, postgresql, sqlite]
|
|
include:
|
|
- engine: mysql
|
|
# Database configuration for Redmine
|
|
database_configuration: >
|
|
test:
|
|
adapter: mysql2
|
|
database: test
|
|
username: redmine
|
|
password: redmine
|
|
encoding: utf8mb4
|
|
collation: utf8mb4_unicode_ci
|
|
# SQL commands to create a database for Redmine
|
|
sql1: CREATE DATABASE IF NOT EXISTS test CHARACTER SET utf8mb4;
|
|
sql2: CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'redmine';
|
|
sql3: GRANT ALL PRIVILEGES ON test.* TO 'redmine'@'localhost';
|
|
# SQL client command
|
|
database_command: mysql -uroot -proot -e
|
|
# SQL service
|
|
database_service: mysql
|
|
- engine: postgresql
|
|
# Database configuration for Redmine
|
|
database_configuration: >
|
|
test:
|
|
adapter: postgresql
|
|
database: test
|
|
username: redmine
|
|
password: redmine
|
|
host: localhost
|
|
# SQL commands to create a database for Redmine
|
|
sql1: CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD 'redmine' NOINHERIT VALID UNTIL 'infinity';
|
|
sql2: CREATE DATABASE test WITH ENCODING='UTF8' OWNER=redmine;
|
|
sql3: ALTER USER redmine CREATEDB;ALTER ROLE redmine WITH SUPERUSER;
|
|
# SQL client command
|
|
database_command: sudo -u postgres psql -c
|
|
# SQL service
|
|
database_service: postgresql
|
|
- engine: sqlite
|
|
# Database configuration for Redmine
|
|
database_configuration: >
|
|
test:
|
|
adapter: sqlite3
|
|
database: db/redmine.sqlite3
|
|
# No database needed here. It's just a file.
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
RAILS_ENV: test
|
|
NAME: redmine_dmsf
|
|
steps:
|
|
- name: Install dependencies
|
|
# Install necessary packages
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y litmus libreoffice subversion xapian-omega
|
|
- name: Clone Redmine
|
|
# Get the latest stable Redmine
|
|
run: svn export https://svn.redmine.org/redmine/branches/6.1-stable/ /opt/redmine
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
- name: Link the plugin
|
|
# Link the plugin to the redmine folder
|
|
run: |
|
|
ln -s $(pwd) /opt/redmine/plugins/redmine_dmsf
|
|
- name: Install Ruby and gems
|
|
uses: ruby/setup-ruby@v1 # The latest major version
|
|
with:
|
|
bundler-cache: true
|
|
ruby-version: '3.2'
|
|
- name: Setup database
|
|
# Create the database
|
|
run: |
|
|
echo "${{matrix.database_configuration}}" > /opt/redmine/config/database.yml
|
|
if [[ "${{matrix.database_service}}" ]]; then
|
|
sudo systemctl start ${{matrix.engine}}
|
|
fi
|
|
if [[ "${{matrix.database_command}}" ]]; then
|
|
${{matrix.database_command}} "${{matrix.sql1}}"
|
|
${{matrix.database_command}} "${{matrix.sql2}}"
|
|
${{matrix.database_command}} "${{matrix.sql3}}"
|
|
fi
|
|
- name: Configure WebDAV
|
|
# Add configuration for WebDAV to work
|
|
run: |
|
|
cp /opt/redmine/config/additional_environment.rb.example /opt/redmine/config/additional_environment.rb
|
|
echo "# WebDAV" >> /opt/redmine/config/additional_environment.rb
|
|
echo "config.log_level = :info" >> /opt/redmine/config/additional_environment.rb
|
|
echo "# Redmine DMSF's WebDAV" >> /opt/redmine/config/additional_environment.rb
|
|
echo "require \"#{Rails.root}/plugins/redmine_dmsf/lib/redmine_dmsf/webdav/custom_middleware\"" >> /opt/redmine/config/additional_environment.rb
|
|
echo "config.middleware.insert_before ActionDispatch::Cookies, RedmineDmsf::Webdav::CustomMiddleware" >> /opt/redmine/config/additional_environment.rb
|
|
- name: Configure Active Storage
|
|
# Add configuration for Active Storage to work
|
|
run: |
|
|
echo "# Active Storage" >> /opt/redmine/config/additional_environment.rb
|
|
echo "require 'active_storage/engine'" >> /opt/redmine/config/additional_environment.rb
|
|
echo "require Rails.root.join('plugins', 'redmine_dmsf', 'lib', 'redmine_dmsf', 'xapian_analyzer').to_s" >> /opt/redmine/config/additional_environment.rb
|
|
echo "config.active_storage.service = :test" >> /opt/redmine/config/additional_environment.rb
|
|
echo "config.active_storage.analyzers.append RedmineDmsf::XapianAnalyzer" >> /opt/redmine/config/additional_environment.rb
|
|
echo "# Active Storage" > /opt/redmine/config/storage.yml
|
|
echo "test:" >> /opt/redmine/config/storage.yml
|
|
echo " service: Disk" >> /opt/redmine/config/storage.yml
|
|
echo " root: <%= Rails.root.join('files', 'dmsf') %>" >> /opt/redmine/config/storage.yml
|
|
- name: Install Redmine
|
|
# Install Redmine
|
|
run: |
|
|
cd /opt/redmine
|
|
bundle config set --local without 'development'
|
|
bundle install
|
|
bundle exec rake generate_secret_token
|
|
bin/rails active_storage:install
|
|
bundle exec rake db:migrate
|
|
bundle exec rake redmine:plugins:migrate
|
|
bundle exec rake redmine:load_default_data
|
|
bundle exec rake assets:precompile
|
|
env:
|
|
REDMINE_LANG: en
|
|
- name: Standard tests
|
|
# Run the tests
|
|
run: |
|
|
cd /opt/redmine
|
|
bundle exec rake redmine:plugins:test:units
|
|
bundle exec rake redmine:plugins:test:functionals
|
|
bundle exec rake redmine:plugins:test:integration
|
|
- name: Helpers tests
|
|
run: |
|
|
cd /opt/redmine
|
|
ruby plugins/redmine_dmsf/test/helpers/dmsf_files_helper_test.rb
|
|
ruby plugins/redmine_dmsf/test/helpers/dmsf_helper_test.rb
|
|
ruby plugins/redmine_dmsf/test/helpers/dmsf_links_helper_test.rb
|
|
ruby plugins/redmine_dmsf/test/helpers/dmsf_queries_helper_test.rb
|
|
- name: Rubocop
|
|
# Run the Rubocop tests
|
|
run: |
|
|
cd /opt/redmine
|
|
bundle exec rubocop -c plugins/redmine_dmsf/.rubocop.yml plugins/redmine_dmsf/
|
|
- name: Litmus
|
|
Prepare Redmine's environment for WebDAV testing
|
|
Run Puma server
|
|
Run Litmus tests (Omit 'http' tests due to 'timeout waiting for interim response' and locks due to complex bogus conditional)
|
|
Shutdown Puma
|
|
Clean up Redmine's environment from WebDAV testing
|
|
run: |
|
|
cd /opt/redmine
|
|
bundle exec rake redmine:dmsf_webdav_test_on
|
|
bundle exec rails server -u Puma -e test -d
|
|
sleep 5
|
|
litmus http://localhost:3000/dmsf/webdav/dmsf_test_project admin admin
|
|
kill $(pgrep -f puma)
|
|
bundle exec rake redmine:dmsf_webdav_test_off
|
|
env:
|
|
TESTS: "basic copymove props"
|
|
- name: Cleanup
|
|
# Rollback plugin's changes to the database
|
|
# Stop the database engine
|
|
run: |
|
|
cd /opt/redmine
|
|
bundle exec rake redmine:plugins:migrate VERSION=0
|
|
if [[ "${{matrix.database_service}}" ]]; then
|
|
sudo systemctl stop ${{matrix.engine}}
|
|
fi
|
|
- name: Archive test.log
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: "test_${{matrix.engine}}.log"
|
|
path: /opt/redmine/log/test.log
|