diff --git a/.devcontainer/codespaces/devcontainer.json b/.devcontainer/codespaces/devcontainer.json new file mode 100644 index 000000000..32d8e843a --- /dev/null +++ b/.devcontainer/codespaces/devcontainer.json @@ -0,0 +1,19 @@ +// For format details, see https://containers.dev/implementors/json_reference/. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/universal +{ + "name": "For Codespaces", + + "image": "mcr.microsoft.com/devcontainers/universal:6", + + "containerEnv": { + "DATABASE_URL": "postgresql://postgres:@localhost", + "COREPACK_ENABLE_DOWNLOAD_PROMPT": "0" + }, + + "onCreateCommand": "bash --login .devcontainer/codespaces/onCreateCommand.sh", + + "postCreateCommand": "bash --login .devcontainer/codespaces/postCreateCommand.sh", + + "postStartCommand": "bash --login .devcontainer/codespaces/postStartCommand.sh" + +} diff --git a/.devcontainer/codespaces/onCreateCommand.sh b/.devcontainer/codespaces/onCreateCommand.sh new file mode 100644 index 000000000..e0c0ddd39 --- /dev/null +++ b/.devcontainer/codespaces/onCreateCommand.sh @@ -0,0 +1,36 @@ +# Install Ruby via rv +curl -LsSf https://rv.dev/install | sh +source ~/.cargo/env +rv ruby list +rv ruby install 3.4.6 +rv ruby install 4.0.0 +rv ruby list +echo 'eval "$(rv shell init bash)"' >> ~/.bashrc +source ~/.bashrc +which ruby +ruby --version + +# Workaround for Yarn GPG key +curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/yarnkey.gpg +echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list +sudo apt update + +# Install Google Chrome +wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O /tmp/google-chrome.deb +sudo apt update && sudo apt install -y /tmp/google-chrome.deb && rm /tmp/google-chrome.deb +google-chrome --version + +# Install Chromedriver +CHROMEDRIVER_VERSION=$(google-chrome --version | awk '{print $3}') +wget https://storage.googleapis.com/chrome-for-testing-public/${CHROMEDRIVER_VERSION}/linux64/chromedriver-linux64.zip +unzip chromedriver-linux64.zip +sudo mv chromedriver-linux64/chromedriver /usr/local/bin/ +rm -rf chromedriver-linux64.zip chromedriver-linux64 +chromedriver --version + +# Install libs +sudo apt install -y libvips + +# Cleanup +sudo apt-get clean +sudo rm -rf /var/lib/apt/lists/* diff --git a/.devcontainer/codespaces/postCreateCommand.sh b/.devcontainer/codespaces/postCreateCommand.sh new file mode 100644 index 000000000..b1f23b525 --- /dev/null +++ b/.devcontainer/codespaces/postCreateCommand.sh @@ -0,0 +1,19 @@ +# Init ruby via rv +source "$HOME/.cargo/env" +eval "$(rv shell init bash)" + +# Wait for Docker to be ready and start PostgreSQL container +until docker info >/dev/null 2>&1; do sleep 1; done +docker rm postgres >/dev/null 2>&1 +docker run -d -i --name postgres -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres +until docker exec postgres pg_isready -U postgres; do sleep 1; done + +# Create config/database.yml +./bin/setup +# Setup & Create .env +./bin/setup + +# Create test database and run seeds +RAILS_ENV=test ./bin/rails dev:prime + +docker stop postgres diff --git a/.devcontainer/codespaces/postStartCommand.sh b/.devcontainer/codespaces/postStartCommand.sh new file mode 100644 index 000000000..7e11a015f --- /dev/null +++ b/.devcontainer/codespaces/postStartCommand.sh @@ -0,0 +1,2 @@ + +docker start postgres diff --git a/spec/example_app/config/environments/development.rb b/spec/example_app/config/environments/development.rb index 31644dbb9..13ea03e5f 100644 --- a/spec/example_app/config/environments/development.rb +++ b/spec/example_app/config/environments/development.rb @@ -75,4 +75,16 @@ # Apply autocorrection by RuboCop to files generated by `bin/rails generate`. # config.generators.apply_rubocop_autocorrect_after_generate! + + # In the current GitHub Codespaces, the Origin header is rewritten, which breaks CSRF protection. + # See: https://github.com/orgs/community/discussions/156532 + if ENV["GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN"] == "app.github.dev" + warn "WARNING: (development) Disabling CSRF protection Origin header check!" + config.action_controller.forgery_protection_origin_check = false + end + + # In GitHub Codespaces, allow connections to the forwarded port. + if ENV["CODESPACES"] == "true" && ENV["RAILS_DEVELOPMENT_HOSTS"].present? + config.hosts << ENV["RAILS_DEVELOPMENT_HOSTS"] + end end