# Redmine plugin for Document Management System "Features" # # Karel Pičman # # 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 # . # 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 - 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 echo "gem \"webrick\"" > Gemfile.local 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 Webrick server Run Litmus tests (Omit 'http' tests due to 'timeout waiting for interim response' and locks due to complex bogus conditional) Shutdown Webrick Clean up Redmine's environment from WebDAV testing TODO: run: | cd /opt/redmine bundle exec rake redmine:dmsf_webdav_test_on bundle exec rails server -u webrick -e test -d sleep 5 litmus http://localhost:3000/dmsf/webdav/dmsf_test_project admin admin kill $(pgrep -f webrick) 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