Skip to content

Commit 7037553

Browse files
committed
Add e2e test workflow
1 parent 06effb1 commit 7037553

File tree

4 files changed

+193
-8
lines changed

4 files changed

+193
-8
lines changed

.devcontainer/run

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
cd /workspace/sentry
6+
7+
sudo mkdir -p vendor/gems
8+
sudo chown -R sentry:sentry vendor/gems
9+
10+
git config --global --add safe.directory /workspace/sentry/vendor/gems
11+
git config --global --add safe.directory /workspace/sentry
12+
13+
sudo chown -R sentry:sentry .
14+
15+
run_service_setup() {
16+
local service="$1"
17+
18+
echo "🚀 Running setup for service: $service"
19+
20+
case "$service" in
21+
"dev")
22+
if ! .devcontainer/setup --with-foreman --only-bundle; then
23+
echo "❌ Setup failed for service: $service"
24+
exit 1
25+
fi
26+
;;
27+
"test")
28+
if ! .devcontainer/setup --with-foreman --only-bundle --only .; then
29+
echo "❌ Setup failed for service: $service"
30+
exit 1
31+
fi
32+
;;
33+
"test-services")
34+
if ! .devcontainer/setup --with-foreman --only .,spec/apps/rails-mini; then
35+
echo "❌ Setup failed for service: $service"
36+
exit 1
37+
fi
38+
;;
39+
*)
40+
echo "❌ Unknown service: $service"
41+
echo "Available services: dev, test, test-services"
42+
exit 1
43+
;;
44+
esac
45+
46+
echo "✅ Setup completed for service: $service"
47+
}
48+
49+
# Parse arguments
50+
if [ "$1" = "--service" ] && [ -n "$2" ]; then
51+
service="$2"
52+
shift 2
53+
54+
run_service_setup "$service"
55+
56+
if [ $# -gt 0 ]; then
57+
exec "$@"
58+
else
59+
exec bash
60+
fi
61+
else
62+
exec "$@"
63+
fi

.devcontainer/setup

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,12 @@
44

55
require 'optparse'
66
require 'fileutils'
7+
require 'pathname'
78

89
class SetupScript
910
WORKSPACE_FOLDERS = %w[
11+
.
12+
spec/apps/rails-mini
1013
sentry-ruby
1114
sentry-rails
1215
sentry-sidekiq
@@ -28,8 +31,6 @@ class SetupScript
2831
def run(args)
2932
parse_options(args)
3033

31-
puts "🚀 Running post-create setup script..."
32-
3334
Dir.chdir(@workspace_root)
3435

3536
if should_run_bundle?
@@ -119,8 +120,10 @@ class SetupScript
119120

120121
if Dir.exist?(folder_path) && File.exist?(gemfile_path)
121122
Dir.chdir(folder_path) do
122-
run_with_spinner(" #{folder}") do
123-
system('bundle install > /dev/null 2>&1')
123+
puts " Installing dependencies for #{folder_path}..."
124+
unless system('bundle install')
125+
puts "❌ Bundle install failed for #{folder}"
126+
exit 1
124127
end
125128
end
126129

@@ -132,8 +135,9 @@ class SetupScript
132135
end
133136

134137
def install_foreman_gem
135-
run_with_spinner("💎 Installing foreman gem") do
136-
system('gem install foreman > /dev/null 2>&1')
138+
unless system('gem install foreman')
139+
puts "❌ Foreman gem installation failed"
140+
exit 1
137141
end
138142
end
139143

@@ -142,8 +146,9 @@ class SetupScript
142146

143147
if Dir.exist?(svelte_mini_path)
144148
Dir.chdir(svelte_mini_path) do
145-
run_with_spinner("📦 Installing npm dependencies for e2e tests") do
146-
system('npm install > /dev/null 2>&1')
149+
unless system('npm install')
150+
puts "❌ npm install failed for svelte-mini"
151+
exit 1
147152
end
148153
end
149154
else

.github/workflows/e2e_tests.yml

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
name: e2e tests
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches:
7+
- master
8+
pull_request:
9+
10+
permissions:
11+
contents: read
12+
13+
concurrency:
14+
group: e2e-tests-${{ github.head_ref || github.run_id }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
e2e-tests:
19+
name: e2e tests
20+
runs-on: ubuntu-latest
21+
timeout-minutes: 5
22+
23+
strategy:
24+
fail-fast: false
25+
matrix:
26+
ruby_version: ["3.4.5"]
27+
28+
env:
29+
DOCKER_IMAGE: "ghcr.io/getsentry/sentry-ruby-devcontainer-3.4"
30+
DOCKER_TAG: "9c29d73a943de506a5990f7407c93663c80b44fd"
31+
32+
steps:
33+
- name: Checkout code
34+
uses: actions/checkout@v4
35+
36+
- name: Set up `.env` file
37+
run: |
38+
cd .devcontainer
39+
cp .env.example .env
40+
41+
- name: Restore rubygems cache
42+
uses: actions/cache@v3
43+
with:
44+
path: vendor/gems
45+
key: ${{ runner.os }}-${{ matrix.ruby_version }}-gems-${{ hashFiles('Gemfile.lock', '*/Gemfile.lock', 'spec/apps/**/Gemfile.lock') }}
46+
restore-keys: |
47+
${{ runner.os }}-${{ matrix.ruby_version }}-gems-
48+
49+
- name: Restore node_modules cache
50+
uses: actions/cache@v3
51+
with:
52+
path: spec/apps/svelte-mini/node_modules
53+
key: ${{ runner.os }}-node-modules-${{ hashFiles('spec/apps/svelte-mini/package-lock.json') }}
54+
restore-keys: |
55+
${{ runner.os }}-node-modules-
56+
57+
- name: Set up test services
58+
run: |
59+
docker compose \
60+
--file .devcontainer/docker-compose.yml \
61+
--env-file .devcontainer/.env \
62+
run --rm sentry-test-services \
63+
echo "Done"
64+
65+
- name: Start test services
66+
run: |
67+
docker compose \
68+
--file .devcontainer/docker-compose.yml \
69+
--env-file .devcontainer/.env \
70+
up -d sentry-test-services
71+
72+
- name: "Wait for rails-mini app to be ready"
73+
uses: nev7n/wait_for_response@v1
74+
with:
75+
url: 'http://localhost:4000/health'
76+
responseCode: 200
77+
timeout: 90000
78+
interval: 500
79+
80+
- name: "Wait for svelte-mini app to be ready"
81+
uses: nev7n/wait_for_response@v1
82+
with:
83+
url: 'http://localhost:4001/health'
84+
responseCode: 200
85+
timeout: 90000
86+
interval: 500
87+
88+
- name: Set up sentry-test container
89+
run: |
90+
docker compose \
91+
--file .devcontainer/docker-compose.yml \
92+
--env-file .devcontainer/.env \
93+
run --rm sentry-test \
94+
echo "Done"
95+
96+
- name: Run e2e tests via sentry-test
97+
run: |
98+
docker compose \
99+
--file .devcontainer/docker-compose.yml \
100+
--env-file .devcontainer/.env \
101+
run --rm sentry-test \
102+
bundle exec rake
103+
104+
- name: Stop e2e services
105+
if: always()
106+
run: docker compose --file .devcontainer/docker-compose.yml down
107+
108+
- name: Upload test artifacts
109+
if: failure()
110+
uses: actions/upload-artifact@v4
111+
with:
112+
name: e2e-test-logs-ruby-${{ matrix.ruby_version }}
113+
path: |
114+
log/sentry_debug_events.log
115+
retention-days: 7

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ Gemfile.lock
1616

1717
node_modules
1818
.vite
19+
20+
vendor/gems

0 commit comments

Comments
 (0)