jbox-web/redmine_git_hosting

View on GitHub
.github/workflows/test.yml

Summary

Maintainability
Test Coverage
name: Test

on:
  - push
  - pull_request

jobs:
  test:
    name: ${{ matrix.redmine }} ${{ matrix.db }} ruby-${{ matrix.ruby }}
    runs-on: ubuntu-latest

    strategy:
      matrix:
        ruby: ['2.7', '3.0', '3.1']
        redmine: ['5.0-stable', 'master']
        db: ['postgres', 'mysql']
      fail-fast: false

    services:
      postgres:
        image: postgres:14
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
        ports:
          - 5432:5432

        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

      mysql:
        image: mysql:8.0
        env:
          MYSQL_ROOT_PASSWORD: 'BestPasswordEver'
        ports:
          # will assign a random free host port
          - 3306/tcp
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries=3

    steps:
      - name: Verify MySQL connection from host
        run: |
          mysql --host 127.0.0.1 --port ${{ job.services.mysql.ports[3306] }} -uroot -pBestPasswordEver -e "SHOW DATABASES"
        if: matrix.db == 'mysql'

      - name: Checkout Redmine
        uses: actions/checkout@v3
        with:
          repository: redmine/redmine
          ref: ${{ matrix.redmine }}
          path: redmine

      - name: Checkout redmine_git_hosting
        uses: actions/checkout@v3
        with:
          path: redmine/plugins/redmine_git_hosting

      - name: Checkout additionals
        uses: actions/checkout@v3
        with:
          repository: AlphaNodes/additionals
          path: redmine/plugins/additionals

      - name: Checkout redmine_sidekiq
        uses: actions/checkout@v3
        with:
          # TODO Switch back to the original repo, once https://github.com/ogom/redmine_sidekiq/pull/16 is released
          # repository: ogom/redmine_sidekiq
          repository: dosyfier/redmine_sidekiq
          ref: fix-rails-6
          path: redmine/plugins/redmine_sidekiq

      - name: Checkout gitolite
        uses: actions/checkout@v3
        with:
          repository: sitaramc/gitolite
          path: gitolite

      - name: Update package archives
        run: sudo apt-get update --yes --quiet

      - name: Install package dependencies
        run: >
          sudo apt-get install --yes --quiet
          build-essential
          cmake
          libgpg-error-dev
          libicu-dev
          libpq-dev
          libmysqlclient-dev
          libssh2-1
          libssh2-1-dev
          pkg-config
          subversion

      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          bundler-cache: true # runs 'bundle install' and caches installed gems automatically

      - name: Prepare Redmine source
        working-directory: redmine
        run: |
          cp plugins/redmine_git_hosting/contrib/github/database-${{ matrix.db }}.yml config/database.yml

      - name: Install admin ssh key
        working-directory: redmine
        run: |
          ssh-keygen -N '' -f plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa

      - name: Install Gitolite
        working-directory: redmine
        run: |
          sudo useradd --create-home git
          sudo -n -u git -i mkdir bin
          sudo -n -u git -i $GITHUB_WORKSPACE/gitolite/install -to /home/git/bin
          sudo cp plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa.pub /home/git/
          sudo chown git.git /home/git/redmine_gitolite_admin_id_rsa.pub
          sudo -n -u git -i bin/gitolite setup -pk redmine_gitolite_admin_id_rsa.pub

      - name: Install Ruby dependencies
        working-directory: redmine
        run: |
          bundle config set --local without 'development'
          bundle config build.rugged --with-ssh
          bundle install --jobs=4 --retry=3

      - name: Run Redmine rake tasks
        env:
          RAILS_ENV: test
          MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
        working-directory: redmine
        run: |
          bundle exec rake generate_secret_token
          bundle exec rake db:create db:migrate redmine:plugins:migrate
          bundle exec rake db:test:prepare

      - name: Install rspec file
        working-directory: redmine
        run: |
          mkdir spec
          cp plugins/redmine_git_hosting/spec/root_spec_helper.rb spec/spec_helper.rb

      - name: Run tests
        env:
          RAILS_ENV: test
          MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
        working-directory: redmine
        run: bundle exec rake redmine_git_hosting:ci:all

      - name: Run uninstall test
        env:
          RAILS_ENV: test
          MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}
        working-directory: redmine
        run: bundle exec rake redmine:plugins:migrate NAME=redmine_git_hosting VERSION=0