From 8671acdf26ca743cac6a54adffc611cfa21599cd Mon Sep 17 00:00:00 2001 From: Haruyuki Iida Date: Sat, 30 Oct 2021 23:39:13 +0000 Subject: [PATCH] devcontainer --- .devcontainer/Dockerfile | 46 +++++++++++++++++ .devcontainer/create-db-user.sql | 2 + .devcontainer/database.yml | 57 ++++++++++++++++++++++ .devcontainer/devcontainer.json | 64 ++++++++++++++++++++++++ .devcontainer/docker-compose.yml | 58 ++++++++++++++++++++++ .devcontainer/launch.json | 84 ++++++++++++++++++++++++++++++++ .devcontainer/post-create.sh | 26 ++++++++++ 7 files changed, 337 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/create-db-user.sql create mode 100644 .devcontainer/database.yml create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yml create mode 100644 .devcontainer/launch.json create mode 100644 .devcontainer/post-create.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..4efffeb --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,46 @@ +# [Choice] Ruby version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.0, 2, 2.7, 2.6, 3-bullseye, 3.0-bullseye, 2-bullseye, 2.7-bullseye, 2.6-bullseye, 3-buster, 3.0-buster, 2-buster, 2.7-buster, 2.6-buster +ARG VARIANT=2-bullseye +FROM mcr.microsoft.com/vscode/devcontainers/ruby:0-${VARIANT} + +# Install Rails +RUN gem install rails webdrivers + +# Default value to allow debug server to serve content over GitHub Codespace's port forwarding service +# The value is a comma-separated list of allowed domains +ENV RAILS_DEVELOPMENT_HOSTS=".githubpreview.dev" + +# [Choice] Node.js version: lts/*, 16, 14, 12, 10 +ARG NODE_VERSION="lts/*" +RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1" + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment this line to install additional gems. +# RUN gem install + +# [Optional] Uncomment this line to install global node packages. +# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1 + +RUN apt-get update +RUN apt-get install -y imagemagick + +WORKDIR /usr/local +ARG REDMINE_VERSION=master +RUN git clone https://github.com/redmine/redmine.git -b ${REDMINE_VERSION} +WORKDIR /usr/local/redmine +COPY .devcontainer/database.yml /usr/local/redmine/config/database.yml + +RUN rm -rf .git +RUN echo "gem 'ruby-debug-ide'" >> Gemfile +RUN echo "gem 'debase'" >> Gemfile +RUN echo "gem 'rufo'" >> Gemfile +ENV DB=sqlite3 +RUN bundle install +RUN bundle exec rake db:migrate +RUN bundle exec rake db:migrate RAILS_ENV=test +COPY .devcontainer/launch.json /usr/local/redmine/.vscode/launch.json +RUN chown -R vscode . + +COPY .devcontainer/post-create.sh /post-create.sh \ No newline at end of file diff --git a/.devcontainer/create-db-user.sql b/.devcontainer/create-db-user.sql new file mode 100644 index 0000000..291dfc4 --- /dev/null +++ b/.devcontainer/create-db-user.sql @@ -0,0 +1,2 @@ +CREATE USER vscode CREATEDB; +CREATE DATABASE vscode WITH OWNER vscode; diff --git a/.devcontainer/database.yml b/.devcontainer/database.yml new file mode 100644 index 0000000..5107702 --- /dev/null +++ b/.devcontainer/database.yml @@ -0,0 +1,57 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +# +sqlite3: &sqlite3 + adapter: sqlite3 + pool: 5 + timeout: 5000 + database: db/redmine.sqlite3 + +sqlite3_test: &sqlite3_test + <<: *<%= 'sqlite3' %> + database: db/redmine.sqlite3_test + +mysql: &mysql + adapter: mysql2 + encoding: utf8 + database: <%= ENV['DB_NAME'] || 'redmine' %> + username: <%= ENV['DB_USERNAME'] || 'root' %> + password: <%= ENV['DB_PASSWORD'] || 'root' %> + host: <%= ENV['DB_HOST'] || 'mysql' %> + port: <%= ENV['DB_PORT'] || 3306 %> + +mysql_test: &mysql_test + <<: *<%= 'mysql' %> + database: redmine_test + +postgres: &postgres + adapter: postgresql + encoding: utf8 + database: <%= ENV['DB_NAME'] || 'redmine' %> + username: <%= ENV['DB_USERNAME'] || 'postgres' %> + password: <%= ENV['DB_PASSWORD'] || 'postgres' %> + host: <%= ENV['DB_HOST'] || 'postgres' %> + port: <%= ENV['DB_PORT'] || 5432 %> + +postgres_test: &postgres_test + <<: *<%= 'postgres' %> + database: redmine_test + + +development: + <<: *<%= ENV['DB'] || 'sqlite3' %> + + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *<%= "#{ENV['DB']}_test" || 'sqlite3_test' %> + + +production: + <<: *<%= ENV['DB'] || 'sqlite3' %> + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..fa994ff --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,64 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.202.5/containers/ruby-rails-postgres +// Update the VARIANT arg in docker-compose.yml to pick a Ruby version +{ + "name": "Ruby on Rails & Postgres", + "dockerComposeFile": "docker-compose.yml", + "service": "app", + + "workspaceFolder": "/usr/local/redmine", + + // Set *default* container specific settings.json values on container create. + "settings": { + "sqltools.connections": [ + { + "name": "Rails Development Database", + "driver": "PostgreSQL", + "previewLimit": 50, + "server": "localhost", + "port": 5432, + + // update this to match config/database.yml + "database": "app_development", + "username": "vscode" + }, + { + "name": "Rails Test Database", + "driver": "PostgreSQL", + "previewLimit": 50, + "server": "localhost", + "port": 5432, + + // update this to match config/database.yml + "database": "app_test", + "username": "vscode" + } + ] + }, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "rebornix.Ruby", + "mtxr.sqltools", + "mtxr.sqltools-driver-pg", + "craigmaslowski.erb", + "hridoy.rails-snippets", + "misogi.ruby-rubocop", + "jnbt.vscode-rufo", + "donjayamanne.git-extension-pack" + ], + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [3000, 5432], + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "sh -x /post-create.sh", + + // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode", + "features": { + // "git": "latest" + } + + +} \ No newline at end of file diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..887a2c4 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,58 @@ +version: '3' + +services: + app: + build: + context: .. + dockerfile: .devcontainer/Dockerfile + args: + # Update 'VARIANT' to pick a version of Ruby: 3, 3.0, 2, 2.7, 2.6 + # Append -bullseye or -buster to pin to an OS version. + # Use -bullseye variants on local arm64/Apple Silicon. + VARIANT: "2.7" + # Optional Node.js version to install + NODE_VERSION: "lts/*" + REDMINE_VERSION: "4.2-stable" + + volumes: + - ..:/usr/local/redmine/plugins/redmine_wiki_extensions:cached + + # Overrides default command so things don't shut down after the process ends. + command: sleep infinity + + # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function. + # network_mode: service:postgres + # Uncomment the next line to use a non-root user for all processes. + # user: vscode + + # Use "forwardPorts" in **devcontainer.json** to forward an app port locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + + postgres: + image: postgres:latest + restart: unless-stopped + volumes: + - postgres-data:/var/lib/postgresql/data + - ./create-db-user.sql:/docker-entrypoint-initdb.d/create-db-user.sql + environment: + POSTGRES_USER: postgres + POSTGRES_DB: redmine + POSTGRES_PASSWORD: postgres + # Add "forwardPorts": ["5432"] to **devcontainer.json** to forward PostgreSQL locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + + mysql: + image: mysql:latest + restart: unless-stopped + volumes: + - mysql-data:/var/lib/mysql + # network_mode: service:postgres + command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_USER: redmine + MYSQL_DB: redmine + MYSQL_PASSWORD: remine +volumes: + postgres-data: null + mysql-data: null diff --git a/.devcontainer/launch.json b/.devcontainer/launch.json new file mode 100644 index 0000000..793c4e9 --- /dev/null +++ b/.devcontainer/launch.json @@ -0,0 +1,84 @@ +{ + "version": "0.2.0", + "configurations": [ + + + { + "name": "Rails server", + "type": "Ruby", + "request": "launch", + "program": "${workspaceRoot}/bin/rails", + "useBundler": true, + "args": [ + "server" + ] + }, + { + "name": "Rails server(postgres)", + "type": "Ruby", + "request": "launch", + "program": "${workspaceRoot}/bin/rails", + "useBundler": true, + "args": [ + "server" + ], + "env":{ + "DB": "postgres" + } + }, + { + "name": "Rails server(mysql)", + "type": "Ruby", + "request": "launch", + "program": "${workspaceRoot}/bin/rails", + "useBundler": true, + "args": [ + "server" + ], + "env":{ + "DB": "mysql" + } + }, + { + "name": "Plugin Test", + "type": "Ruby", + "request": "launch", + "program": "${workspaceRoot}/bin/rake", + "useBundler": true, + "args": [ + "redmine:plugins:test" + ], + "env":{ + "RAILS_ENV": "test" + } + }, + { + "name": "Plugin Test(postgres)", + "type": "Ruby", + "request": "launch", + "program": "${workspaceRoot}/bin/rake", + "useBundler": true, + "args": [ + "redmine:plugins:test" + ], + "env":{ + "RAILS_ENV": "test", + "DB": "postgres" + } + }, + { + "name": "Plugin Test(mysql)", + "type": "Ruby", + "request": "launch", + "program": "${workspaceRoot}/bin/rake", + "useBundler": true, + "args": [ + "redmine:plugins:test" + ], + "env":{ + "RAILS_ENV": "test", + "DB": "mysql" + } + } + ] +} \ No newline at end of file diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh new file mode 100644 index 0000000..fe6c38f --- /dev/null +++ b/.devcontainer/post-create.sh @@ -0,0 +1,26 @@ +#!/bin/sh +cd /usr/local/redmine + +cp plugins/redmine_wiki_extensions/Gemfile_for_test plugins/redmine_wiki_extensions/Gemfile +bundle install +bundle exec rake redmine:plugins:migrate +bundle exec rake redmine:plugins:migrate RAILS_ENV=test + +initdb() { + bundle exec rake db:create + bundle exec rake db:migrate + bundle exec rake redmine:plugins:migrate + + bundle exec rake db:drop RAILS_ENV=test + bundle exec rake db:create RAILS_ENV=test + bundle exec rake db:migrate RAILS_ENV=test + bundle exec rake redmine:plugins:migrate RAILS_ENV=test +} + +export DB=postgres + +initdb + +export DB=mysql + +initdb \ No newline at end of file