# 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; # 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('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 # TODO: # 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