diff --git a/.devcontainer/.env.example b/.devcontainer/.env.example index 5ebb7ea84..cb5d03635 100644 --- a/.devcontainer/.env.example +++ b/.devcontainer/.env.example @@ -1,8 +1,5 @@ -# Official Ruby images -IMAGE="ruby:3.4.5-slim-bookworm" -VERSION="3.4.5" - -# IMAGE="jruby:latest" +# Devcontainer configuration +RUBY_VERSION="3.4.9" # E2E testing SENTRY_DSN="http://user:pass@sentry.localhost/project/42" diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d083a7abc..91a917802 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,6 +1,7 @@ -ARG IMAGE="ruby" +ARG BASE_IMAGE=ubuntu:24.04 +FROM ${BASE_IMAGE} -FROM ${IMAGE} AS build +ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ sudo \ @@ -8,6 +9,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ git \ curl \ wget \ + ca-certificates \ build-essential \ pkg-config \ libssl-dev \ @@ -21,27 +23,62 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libgdbm-dev \ sqlite3 \ libsqlite3-dev \ + tzdata \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN echo "sentry ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/sentry \ && chmod 0440 /etc/sudoers.d/sentry -RUN groupadd --gid 1000 sentry \ +RUN userdel -r ubuntu 2>/dev/null || true \ + && groupdel ubuntu 2>/dev/null || true \ + && groupadd --gid 1000 sentry \ && useradd --uid 1000 --gid sentry --shell /bin/bash --create-home sentry WORKDIR /workspace/sentry RUN chown -R sentry:sentry /workspace/sentry -ARG VERSION -ARG GEM_HOME="/workspace/sentry/vendor/gems/${VERSION}" - ENV LANG=C.UTF-8 \ BUNDLE_JOBS=4 \ BUNDLE_RETRY=3 \ - GEM_HOME=/workspace/sentry/vendor/gems/${VERSION} \ - PATH=$PATH:${GEM_HOME}/bin \ - REDIS_HOST=redis + REDIS_HOST=redis \ + PATH=/home/sentry/.local/share/mise/shims:/home/sentry/.local/bin:$PATH USER sentry + +# Pre-create the bundle directory owned by sentry so that a Docker named volume +# mounted here is initialised with the correct ownership (Docker copies image +# directory content when a volume is first attached). +RUN mkdir -p /home/sentry/bundle + +RUN curl https://mise.run | sh \ + && echo 'eval "$(/home/sentry/.local/bin/mise activate bash)"' >> /home/sentry/.bashrc \ + && echo 'eval "$(/home/sentry/.local/bin/mise activate zsh)"' >> /home/sentry/.zshenv + +# When RUBY_VERSION is provided at build time, pre-install that Ruby so the +# container starts immediately without downloading it at runtime. When it is +# empty (local dev builds) Ruby is installed lazily by the `run` entrypoint. +ARG RUBY_VERSION="" + +# Java is always installed (required for JRuby). It is listed in .mise.toml so +# it is available for all users regardless of which Ruby flavour they use. +RUN echo "๐Ÿ“ฆ Pre-installing java@temurin-21..." && \ + /home/sentry/.local/bin/mise install "java@temurin-21" && \ + /home/sentry/.local/bin/mise use --global "java@temurin-21" + +RUN if [ -n "${RUBY_VERSION}" ]; then \ + echo "๐Ÿ“ฆ Pre-installing ruby@${RUBY_VERSION} (precompiled)..." && \ + MISE_RUBY_COMPILE=0 /home/sentry/.local/bin/mise install "ruby@${RUBY_VERSION}" && \ + /home/sentry/.local/bin/mise use --global "ruby@${RUBY_VERSION}"; \ + fi + +# Node.js is always needed for the svelte-mini e2e app. +RUN echo "๐Ÿ“ฆ Pre-installing node@lts..." && \ + /home/sentry/.local/bin/mise install "node@lts" && \ + /home/sentry/.local/bin/mise use --global "node@lts" + +# Install headless Chromium via Playwright (includes all system dependencies). +# Symlink the binary into ~/.local/bin which is already on PATH. +RUN /home/sentry/.local/share/mise/shims/npx playwright install chromium --with-deps +RUN bash -c 'ln -sf /home/sentry/.cache/ms-playwright/chromium-*/chrome-linux/chrome /home/sentry/.local/bin/chromium' diff --git a/.devcontainer/VERSION b/.devcontainer/VERSION new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/.devcontainer/VERSION @@ -0,0 +1 @@ +1 diff --git a/.devcontainer/devcontainer-lock.json b/.devcontainer/devcontainer-lock.json new file mode 100644 index 000000000..1cf373bb3 --- /dev/null +++ b/.devcontainer/devcontainer-lock.json @@ -0,0 +1,29 @@ +{ + "features": { + "ghcr.io/devcontainers-extra/features/npm-packages:latest": { + "version": "1.0.1", + "resolved": "ghcr.io/devcontainers-extra/features/npm-packages@sha256:0851cc312204f4044f22230986134026409565f9e632d8ab2b8c639e81cedd7c", + "integrity": "sha256:0851cc312204f4044f22230986134026409565f9e632d8ab2b8c639e81cedd7c" + }, + "ghcr.io/devcontainers/features/github-cli:latest": { + "version": "1.1.0", + "resolved": "ghcr.io/devcontainers/features/github-cli@sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671", + "integrity": "sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671" + }, + "ghcr.io/devcontainers/features/node:latest": { + "version": "2.0.0", + "resolved": "ghcr.io/devcontainers/features/node@sha256:fedd4c11f7adfb64283b578dddc7da906728daa25fa293351c9d913231acf12f", + "integrity": "sha256:fedd4c11f7adfb64283b578dddc7da906728daa25fa293351c9d913231acf12f" + }, + "ghcr.io/nils-geistmann/devcontainers-features/zsh:latest": { + "version": "0.0.8", + "resolved": "ghcr.io/nils-geistmann/devcontainers-features/zsh@sha256:fd57a61a5187480b5e73f8041be5b67005be48f06503736df6cfdd8d0f38f3c4", + "integrity": "sha256:fd57a61a5187480b5e73f8041be5b67005be48f06503736df6cfdd8d0f38f3c4" + }, + "ghcr.io/rocker-org/devcontainer-features/apt-packages:latest": { + "version": "1.0.2", + "resolved": "ghcr.io/rocker-org/devcontainer-features/apt-packages@sha256:87a4d7750a596a5db034ba8508782f31aebdc2ffe955c66aaecb33d9de2ecdae", + "integrity": "sha256:87a4d7750a596a5db034ba8508782f31aebdc2ffe955c66aaecb33d9de2ecdae" + } + } +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f21983fb3..4f89e2184 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,12 +5,11 @@ "workspaceFolder": "/workspace/sentry", "features": { "ghcr.io/devcontainers/features/github-cli:latest": {}, - "ghcr.io/devcontainers-extra/features/mise:latest": {}, "ghcr.io/nils-geistmann/devcontainers-features/zsh:latest": {}, "ghcr.io/devcontainers/features/node:latest": {}, "ghcr.io/devcontainers-extra/features/npm-packages:latest": {}, "ghcr.io/rocker-org/devcontainer-features/apt-packages:latest": { - "packages": "inotify-tools" + "packages": "inotify-tools,tzdata" } }, "customizations": { diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index a85243cba..257be0385 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -5,8 +5,7 @@ services: context: .. dockerfile: .devcontainer/Dockerfile args: - IMAGE: ${IMAGE} - VERSION: ${VERSION} + BASE_IMAGE: ${BASE_IMAGE:-ubuntu:24.04} volumes: - ..:/workspace/sentry:cached working_dir: /workspace/sentry @@ -14,15 +13,20 @@ services: sentry-dev: <<: *sentry-build - entrypoint: ".devcontainer/run --service dev" - command: "sleep infinity" + entrypoint: [".devcontainer/run"] depends_on: - redis sentry-test: <<: *sentry-build - entrypoint: ".devcontainer/run --service test" - command: ["foreman", "start"] + profiles: ["e2e"] + entrypoint: [".devcontainer/run"] + command: ["mise", "run", "e2e:serve"] + environment: + BUNDLE_PATH: /home/sentry/bundle + volumes: + - ..:/workspace/sentry:cached + - bundle-gems:/home/sentry/bundle ports: - "${SENTRY_E2E_RAILS_APP_PORT}:4000" - "${SENTRY_E2E_SVELTE_APP_PORT}:4001" @@ -33,3 +37,6 @@ services: - ALLOW_EMPTY_PASSWORD=yes ports: - "6379:6379" + +volumes: + bundle-gems: diff --git a/.devcontainer/run b/.devcontainer/run index 59661dace..dca1c6d62 100755 --- a/.devcontainer/run +++ b/.devcontainer/run @@ -1,92 +1,58 @@ #!/bin/bash - -set -e +# +# Container entrypoint. +# +# Order of operations: +# 1. Set up mise (the Ruby version manager) for this shell. +# 2. Ensure the desired Ruby is installed (precompiled, no source build). +# 3. Hand off to whatever docker-compose passes as `command`. +# +set -euo pipefail cd /workspace/sentry -sudo mkdir -p vendor/gems -sudo chown -R sentry:sentry vendor/gems - -# git config --global --replace-all safe.directory /workspace/sentry -# git config --global --replace-all safe.directory /workspace/sentry/vendor/gems/* - -sudo chown -R sentry:sentry . - -run_service_setup() { - local service="$1" +# In CI the workspace is checked out by the runner user (e.g. UID 1001) and +# then bind-mounted into the container where we run as sentry (UID 1000). +# Fix ownership once here so bundler, git, etc. can write freely. +sudo chown -R sentry:sentry /workspace/sentry 2>/dev/null || true +MISE_BIN="/home/sentry/.local/bin/mise" - echo "๐Ÿš€ Running setup for service: $service" +# Git also refuses to operate in directories owned by a different user. +git config --global --add safe.directory /workspace/sentry 2>/dev/null || true - case "$service" in - "dev") - if ! .devcontainer/setup --with-foreman --only-bundle; then - echo "โŒ Setup failed for service: $service" - exit 1 - fi - ;; - "test") - if ! .devcontainer/setup --with-foreman --only .,spec/apps/rails-mini; then - echo "โŒ Setup failed for service: $service" - exit 1 - fi - ;; - *) - echo "โŒ Unknown service: $service" - echo "Available services: dev, test" - exit 1 - ;; - esac +# ---- 1. mise setup ----------------------------------------------------------- - echo "โœ… Setup completed for service: $service" -} - -# Function to start services in background -start_services_if_needed() { - # Check if we're running tests (bundle exec rake) - if [[ "$*" == *"bundle exec rake"* ]]; then - echo "๐Ÿš€ Starting e2e services in background for test execution..." +if [[ ! -x "$MISE_BIN" ]]; then + echo "โŒ mise not found at $MISE_BIN (it should be installed by the Dockerfile)" + exit 1 +fi - # Start foreman in background - foreman start & - FOREMAN_PID=$! +# Activate mise for this shell so PATH/shims are resolved correctly. +eval "$("$MISE_BIN" activate bash)" - # Wait for services to be ready - echo "โณ Waiting for services to start..." - for i in {1..30}; do - if curl -f http://localhost:4000/health >/dev/null 2>&1 && \ - curl -f http://localhost:4001/health >/dev/null 2>&1; then - echo "โœ… Services are ready!" - break - fi +# Trust the workspace config so mise will use it without prompting. +"$MISE_BIN" trust /workspace/sentry >/dev/null - if [ $i -eq 30 ]; then - echo "โŒ Services failed to start within timeout" - kill $FOREMAN_PID 2>/dev/null || true - exit 1 - fi +# ---- 2. Install Ruby (precompiled) ------------------------------------------- - sleep 2 - done +# Default to the latest Ruby unless the caller pins a specific version. +RUBY_VERSION="${RUBY_VERSION:-latest}" - # Set up cleanup trap - trap "echo '๐Ÿงน Stopping services...'; kill $FOREMAN_PID 2>/dev/null || true; wait $FOREMAN_PID 2>/dev/null || true" EXIT - fi -} +# Skip installation when the version is already present in the image (e.g. CI +# images built with the RUBY_VERSION build arg in the Dockerfile). +if "$MISE_BIN" list ruby 2>/dev/null | grep -qF "${RUBY_VERSION}"; then + echo "โœ… ruby@${RUBY_VERSION} already installed, skipping download." +else + echo "๐Ÿ“ฆ Installing ruby@${RUBY_VERSION} (precompiled)..." + "$MISE_BIN" install "ruby@${RUBY_VERSION}" +fi -# Parse arguments -if [ "$1" = "--service" ] && [ -n "$2" ]; then - service="$2" - shift 2 +"$MISE_BIN" use --global "ruby@${RUBY_VERSION}" - run_service_setup "$service" +# ---- 3. Hand off ------------------------------------------------------------- - if [ $# -gt 0 ]; then - start_services_if_needed "$@" - exec "$@" - else - exec bash - fi +if [[ $# -eq 0 ]]; then + exec sleep infinity else - start_services_if_needed "$@" exec "$@" fi diff --git a/.devcontainer/setup b/.devcontainer/setup index 9789d999f..408f7d8de 100755 --- a/.devcontainer/setup +++ b/.devcontainer/setup @@ -35,7 +35,6 @@ class SetupScript if should_run_bundle? cleanup_ruby_lsp_directories - update_rubygems_and_bundler install_bundle_dependencies install_foreman_gem if @options[:with_foreman] end @@ -123,7 +122,7 @@ class SetupScript Dir.chdir(folder_path) do puts " Installing dependencies for #{folder_path}..." - unless system("[ -f Gemfile.lock ] && rm Gemfile.lock; bundle install") + unless system("bundle install") puts "โŒ Bundle install failed for #{folder}" exit 1 end @@ -136,28 +135,6 @@ class SetupScript end end - def update_rubygems_and_bundler - puts "๐Ÿ“ฆ Updating RubyGems and Bundler..." - - if RUBY_VERSION >= "3.0" - unless system("sudo gem update --system --silent") - puts "โŒ RubyGems update failed" - exit 1 - end - else - unless system("sudo gem update --silent --system 3.4.22") - puts "โŒ RubyGems update failed" - exit 1 - end - - # sentry-sidekiq does not bundle with Bundler 2.5.x that ships with RubyGems 3.4.22 - unless system("sudo gem install bundler -v 2.4.22") - puts "โŒ Bundler installation failed" - exit 1 - end - end - end - def install_foreman_gem unless system('gem install foreman') puts "โŒ Foreman gem installation failed" diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml index 0a07303ea..46496275f 100644 --- a/.github/workflows/build_images.yml +++ b/.github/workflows/build_images.yml @@ -1,6 +1,14 @@ name: "Build & push devcontainer" on: + # This works only on the default branch. To trigger it in a topic branch: + # + # gh workflow run build_images.yml --repo getsentry/sentry-ruby --ref your-branch + # + # IMPORTANT: update `.devcontainer/VERSION` for a topic branch build + # + workflow_dispatch: + push: branches: - master @@ -8,13 +16,6 @@ on: - .devcontainer/** - .github/workflows/build_images.yml - # Uncomment if you want to test things out in a PR - # - # pull_request: - # paths: - # - .devcontainer/** - # - .github/workflows/build_images.yml - permissions: contents: read packages: write # Required for GHCR @@ -23,59 +24,48 @@ jobs: build-and-push: runs-on: ubuntu-latest strategy: + fail-fast: false matrix: - ruby_image: - - ruby:2.7.8-slim-bullseye - - ruby:3.0.7-slim-bullseye - - ruby:3.1.7-slim-bookworm - - ruby:3.2.9-slim-trixie - - ruby:3.3.10-slim-trixie - - ruby:3.4.8-slim-trixie - - ruby:4.0.0-slim-trixie + include: + - flavor: "4.0" + base_image: ubuntu:24.04 + ruby_version: "4.0.3" + - flavor: "3.4" + base_image: ubuntu:24.04 + ruby_version: "3.4.9" + - flavor: "2.7" + base_image: ubuntu:22.04 + ruby_version: "2.7.8" steps: - name: Check out current commit uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 - - name: Generate short image name and extract version - id: image_name - run: | - ruby_image="${{ matrix.ruby_image }}" + - name: Read devcontainer version + id: version + run: echo "version=$(cat .devcontainer/VERSION)" >> $GITHUB_OUTPUT - # Extract full version for GEM_HOME (e.g., ruby:3.4.5-slim-bookworm -> 3.4.5) - if [[ "$ruby_image" == ruby:* ]]; then - full_version=$(echo "$ruby_image" | cut -d: -f2 | cut -d- -f1) - version=$(echo "$ruby_image" | cut -d: -f2 | cut -d. -f1,2) - short_name="sentry-ruby-devcontainer-${version}" - elif [[ "$ruby_image" == jruby:latest ]]; then - full_version="latest" - short_name="sentry-ruby-devcontainer-jruby-latest" - elif [[ "$ruby_image" == jruby:* ]]; then - full_version=$(echo "$ruby_image" | cut -d: -f2 | cut -d- -f1) - version=$(echo "$ruby_image" | cut -d: -f2 | cut -d. -f1,2) - short_name="sentry-ruby-devcontainer-jruby-${version}" - else - full_version="latest" - short_name="sentry-ruby-devcontainer-${ruby_image}" - fi + - name: Log in to GHCR + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - echo "short_name=${short_name}" >> $GITHUB_OUTPUT - echo "full_version=${full_version}" >> $GITHUB_OUTPUT - echo "Generated short image name: ${short_name}" - echo "Extracted full version: ${full_version}" + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3 - name: Build and push devcontainer image - id: build - uses: getsentry/action-build-and-push-images@8fc75e483c09a68721f2c8951292ee17f8821766 # main + uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6 with: - image_name: "${{ steps.image_name.outputs.short_name }}" - dockerfile_path: ".devcontainer/Dockerfile" - ghcr: true - publish_on_pr: true - build_args: | - IMAGE=${{ matrix.ruby_image }} - VERSION=${{ steps.image_name.outputs.full_version }} - - - name: Use outputs - run: | - echo "GHCR URL: ${{ steps.build.outputs.ghcr_image_url }}" + context: . + file: .devcontainer/Dockerfile + push: true + tags: | + ghcr.io/getsentry/sentry-ruby-devcontainer-${{ matrix.flavor }}:${{ steps.version.outputs.version }} + ${{ github.ref == 'refs/heads/master' && format('ghcr.io/getsentry/sentry-ruby-devcontainer-{0}:latest', matrix.flavor) || '' }} + build-args: | + BASE_IMAGE=${{ matrix.base_image }} + RUBY_VERSION=${{ matrix.ruby_version }} + cache-from: type=gha,scope=${{ matrix.flavor }} + cache-to: type=gha,mode=max,scope=${{ matrix.flavor }} diff --git a/.github/workflows/e2e_tests.yml b/.github/workflows/e2e_tests.yml index 82f7a013e..530fa772a 100644 --- a/.github/workflows/e2e_tests.yml +++ b/.github/workflows/e2e_tests.yml @@ -9,6 +9,7 @@ on: permissions: contents: read + packages: read concurrency: group: e2e-tests-${{ github.head_ref || github.run_id }} @@ -23,28 +24,37 @@ jobs: strategy: fail-fast: false matrix: - ruby_version: ["3.4.5"] - - env: - DOCKER_IMAGE: "ghcr.io/getsentry/sentry-ruby-devcontainer-3.4" - DOCKER_TAG: "d54d0ea1ee3e0d49f2b86d2689278447ccbbe0f9" + include: + - ruby_version: "3.4.9" + flavor: "3.4" + - ruby_version: "4.0.3" + flavor: "4.0" steps: - name: Checkout code uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + - name: Read devcontainer version + id: devcontainer-version + run: echo "version=$(cat .devcontainer/VERSION)" >> $GITHUB_OUTPUT + - name: Set up `.env` file run: | cd .devcontainer cp .env.example .env + echo "RUBY_VERSION=${{ matrix.ruby_version }}" >> .env + echo "DOCKER_IMAGE=ghcr.io/getsentry/sentry-ruby-devcontainer-${{ matrix.flavor }}" >> .env + echo "DOCKER_TAG=${{ steps.devcontainer-version.outputs.version }}" >> .env - - name: Restore rubygems cache - uses: actions/cache@6f8efc29b200d32929f49075959781ed54ec270c # v3 + - name: Log in to GHCR + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3 with: - path: vendor/gems - key: ${{ runner.os }}-${{ matrix.ruby_version }}-gems-${{ hashFiles('Gemfile.lock', '*/Gemfile.lock', 'spec/apps/**/Gemfile.lock') }} - restore-keys: | - ${{ runner.os }}-${{ matrix.ruby_version }}-gems- + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Pull test container image + run: docker pull ghcr.io/getsentry/sentry-ruby-devcontainer-${{ matrix.flavor }}:${{ steps.devcontainer-version.outputs.version }} - name: Restore node_modules cache uses: actions/cache@6f8efc29b200d32929f49075959781ed54ec270c # v3 @@ -59,15 +69,17 @@ jobs: docker compose \ --file .devcontainer/docker-compose.yml \ --env-file .devcontainer/.env \ + --profile e2e \ run --rm sentry-test \ - echo "Done" + .devcontainer/setup --only .,spec/apps/rails-mini - name: Start test services run: | docker compose \ --file .devcontainer/docker-compose.yml \ --env-file .devcontainer/.env \ - up -d sentry-test + --profile e2e \ + up -d --no-build sentry-test - name: "Wait for rails-mini app to be ready" uses: nev7n/wait_for_response@81b0b0eded16435202e126beb3e704fc00430f5b # v1 @@ -90,12 +102,13 @@ jobs: docker compose \ --file .devcontainer/docker-compose.yml \ --env-file .devcontainer/.env \ + --profile e2e \ exec sentry-test \ bundle exec rake - name: Stop e2e services if: always() - run: docker compose --file .devcontainer/docker-compose.yml down + run: docker compose --file .devcontainer/docker-compose.yml --profile e2e down - name: Upload test artifacts if: failure() diff --git a/.mise.toml b/.mise.toml new file mode 100644 index 000000000..dd108298f --- /dev/null +++ b/.mise.toml @@ -0,0 +1,19 @@ +[settings] +ruby.compile = false + +[tools] +ruby = "latest" +node = "lts" +java = "temurin-21" + +[tasks."e2e:rails"] +description = "Start the rails-mini e2e app" +run = "cd spec/apps/rails-mini && bundle exec ruby app.rb" + +[tasks."e2e:svelte"] +description = "Start the svelte-mini e2e app" +run = "cd spec/apps/svelte-mini && npm run dev" + +[tasks."e2e:serve"] +description = "Start all e2e apps in parallel" +depends = ["e2e:rails", "e2e:svelte"] diff --git a/Procfile b/Procfile deleted file mode 100644 index 321f75768..000000000 --- a/Procfile +++ /dev/null @@ -1,2 +0,0 @@ -rails: cd spec/apps/rails-mini && bundle exec ruby app.rb -svelte: cd spec/apps/svelte-mini && npm run dev diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ea53b64b9..fbc3cb669 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -25,7 +25,7 @@ options.add_argument("--no-sandbox") options.add_argument("--disable-gpu") options.add_argument("--temp-profile") - options.binary = "/usr/bin/chromium" if File.exist?("/usr/bin/chromium") + options.binary = "/home/sentry/.local/bin/chromium" if File.exist?("/home/sentry/.local/bin/chromium") Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) end