Skip to content

Commit 28901c9

Browse files
waghanza@gmail.comwaghanza
authored andcommitted
enable builkite
1 parent 577d0a9 commit 28901c9

File tree

26 files changed

+20850
-20441
lines changed

26 files changed

+20850
-20441
lines changed

.buildkite/pipeline.yml

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# .buildkite/pipeline.yml
2+
steps:
3+
# --------------------------------------------------------
4+
# STEP 1 — Get changed files
5+
# --------------------------------------------------------
6+
- label: ":git: Detect changed files"
7+
key: detect-changes
8+
commands:
9+
- echo "--- Detecting changed files"
10+
- git fetch origin main
11+
- git diff --name-only origin/main...HEAD > changed_files.txt
12+
- echo "Changed files:"
13+
- cat changed_files.txt
14+
# Save for later steps
15+
- buildkite-agent artifact upload changed_files.txt
16+
17+
# --------------------------------------------------------
18+
# STEP 2 — Determine languages based on changed files
19+
# --------------------------------------------------------
20+
- label: ":mag: Identify languages"
21+
key: list-languages
22+
depends_on: detect-changes
23+
commands:
24+
- buildkite-agent artifact download changed_files.txt .
25+
- echo "--- Extracting top-level folders"
26+
- awk -F/ '{print $1}' changed_files.txt | sort -u > languages.txt
27+
- echo "Languages found:"
28+
- cat languages.txt
29+
- buildkite-agent artifact upload languages.txt
30+
31+
# --------------------------------------------------------
32+
# STEP 3 — Discover frameworks per language
33+
# --------------------------------------------------------
34+
- label: ":gear: Discover frameworks"
35+
key: list-frameworks
36+
depends_on: list-languages
37+
commands:
38+
- buildkite-agent artifact download languages.txt .
39+
- echo "--- Listing frameworks per language"
40+
- mkdir frameworks
41+
- |
42+
while read lang; do
43+
echo "Finding frameworks in $lang/"
44+
find "$lang" -maxdepth 1 -type d ! -path "$lang" -printf "%f\n" \
45+
| grep -v '^\.$' > "frameworks/${lang}.txt" || true
46+
echo "$lang frameworks:"
47+
cat "frameworks/${lang}.txt" || echo "(none)"
48+
done < languages.txt
49+
50+
# Combine all into JSON pairs for clarity
51+
- |
52+
echo "[" > pairs.json
53+
first=true
54+
while read lang; do
55+
while read fw; do
56+
if [ -n "$fw" ]; then
57+
if [ "$first" = false ]; then echo "," >> pairs.json; fi
58+
echo "{\"language\":\"$lang\",\"framework\":\"$fw\"}" >> pairs.json
59+
first=false
60+
fi
61+
done < "frameworks/${lang}.txt"
62+
done < languages.txt
63+
echo "]" >> pairs.json
64+
65+
- echo "Discovered pairs:"
66+
- cat pairs.json
67+
- buildkite-agent artifact upload pairs.json
68+
69+
# --------------------------------------------------------
70+
# STEP 4 — Dynamically create one job per (language, framework)
71+
# --------------------------------------------------------
72+
- label: ":rocket: Expand pipeline dynamically"
73+
key: expand
74+
depends_on: list-frameworks
75+
commands:
76+
- buildkite-agent artifact download pairs.json .
77+
- echo "--- Expanding pipeline dynamically"
78+
79+
# Split into individual steps and upload
80+
- |
81+
jq -c '.[]' pairs.json | while read pair; do
82+
lang=$(echo "$pair" | jq -r '.language')
83+
fw=$(echo "$pair" | jq -r '.framework')
84+
85+
cat <<YAML > step.yml
86+
steps:
87+
- label: ":test_tube: Run tests - ${lang}/${fw}"
88+
command:
89+
- echo "Running tests for ${lang}/${fw}"
90+
- ./scripts/run-tests.sh ${lang} ${fw}
91+
YAML
92+
buildkite-agent pipeline upload step.yml
93+
done
94+

.env

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
DATABASE_URL=postgresql://postgres@localhost/benchmark
22
DURATION=15
3-
CONCURRENCIES=64,256,512
3+
#CONCURRENCIES=64,256,512
4+
CONCURRENCIES=64,128,256
45
ROUTES=GET:/,GET:/user/0,POST:/user

.tasks/ci.rake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ namespace :ci do
3434
matrix[:include].uniq!
3535
puts matrix.to_json
3636
end
37-
end
37+
end

.tasks/collect.rake

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -24,52 +24,51 @@ end
2424
task :collect do
2525
database = ENV.fetch('DATABASE_URL')
2626
db = PG.connect(database)
27-
Dir.glob('*/*/.results/*/**.json').each do |file|
28-
pp file
29-
info = file.split('/')
30-
language = info[0]
31-
framework = info[1]
32-
concurrency = info[3]
33-
res = db.query(
34-
'INSERT INTO languages (label) VALUES ($1) ON CONFLICT (label) DO UPDATE SET label = $1 RETURNING id', [language]
35-
)
36-
language_id = res.first['id']
27+
Dir.glob('*/*/.results/*/**.json').each do |file|
28+
info = file.split('/')
29+
language = info[0]
30+
framework = info[1]
31+
concurrency = info[3]
32+
res = db.query(
33+
'INSERT INTO languages (label) VALUES ($1) ON CONFLICT (label) DO UPDATE SET label = $1 RETURNING id', [language]
34+
)
35+
language_id = res.first['id']
3736

38-
res = db.query(
39-
'INSERT INTO frameworks (language_id, label) VALUES ($1, $2) ON CONFLICT (language_id, label) DO UPDATE SET label = $2 RETURNING id', [
40-
language_id, framework
41-
]
42-
)
43-
framework_id = res.first['id']
44-
data = YAML.load_file(file, symbolize_names: true)
37+
res = db.query(
38+
'INSERT INTO frameworks (language_id, label) VALUES ($1, $2) ON CONFLICT (language_id, label) DO UPDATE SET label = $2 RETURNING id', [
39+
language_id, framework
40+
]
41+
)
42+
framework_id = res.first['id']
43+
data = YAML.load_file(file, symbolize_names: true)
4544

46-
res = db.query(
47-
'INSERT INTO concurrencies (level) VALUES ($1) ON CONFLICT (level) DO UPDATE SET level = $1 RETURNING id', [concurrency]
48-
)
45+
res = db.query(
46+
'INSERT INTO concurrencies (level) VALUES ($1) ON CONFLICT (level) DO UPDATE SET level = $1 RETURNING id', [concurrency]
47+
)
4948

50-
concurrency_level_id = res.first['id']
51-
results = {
52-
duration_ms: data.dig(:summary, :total) * 1000,
53-
total_requests: -1,
54-
total_requests_per_s: data.dig(:summary, :requestsPerSec),
55-
total_bytes_received: data.dig(:summary, :totalData),
56-
socket_connection_errors: -1,
57-
socket_read_errors: -1,
58-
socket_write_errors: -1,
59-
http_errors: -1,
60-
request_timeouts: -1,
61-
minimum_latency: -1,
62-
average_latency: -1,
63-
standard_deviation: -1,
64-
percentile50: data.dig(:latencyPercentiles, :p50),
65-
percentile75: data.dig(:latencyPercentiles, :p75),
66-
percentile90: data.dig(:latencyPercentiles, :p90),
67-
percentile99:data.dig(:latencyPercentiles, :p95),
68-
'percentile99999': -1,
69-
}
70-
results.each do |key, value|
71-
insert(db, framework_id, key, value, concurrency_level_id)
49+
concurrency_level_id = res.first['id']
50+
results = {
51+
duration_ms: data.dig(:summary, :total) * 1000,
52+
total_requests: -1,
53+
total_requests_per_s: data.dig(:summary, :requestsPerSec),
54+
total_bytes_received: data.dig(:summary, :totalData),
55+
socket_connection_errors: -1,
56+
socket_read_errors: -1,
57+
socket_write_errors: -1,
58+
http_errors: -1,
59+
request_timeouts: -1,
60+
minimum_latency: -1,
61+
average_latency: -1,
62+
standard_deviation: -1,
63+
percentile50: data.dig(:latencyPercentiles, :p50),
64+
percentile75: data.dig(:latencyPercentiles, :p75),
65+
percentile90: data.dig(:latencyPercentiles, :p90),
66+
percentile99: data.dig(:latencyPercentiles, :p95),
67+
percentile99999: -1
68+
}
69+
results.each do |key, value|
70+
insert(db, framework_id, key, value, concurrency_level_id)
7271
end
73-
end
72+
end
7473
db.close
7574
end

.tasks/db.rake

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,20 @@ end
2929
namespace :db do
3030
task :md_export do
3131
results = JSON.parse(File.read('data.json'))
32-
results['metrics'].map { |m| m['framework'] = results['frameworks'].detect {|f| f['id'] == m['framework_id'] }['label'] }
32+
results['metrics'].map { |m| m['framework'] = results['frameworks'].detect { |f| f['id'] == m['framework_id'] }['label'] }
33+
reqs = []
3334
results['metrics'].each do |metric|
34-
pp "| #{metric['framework']} | #{metric['level']} | #{metric['value']} |" if metric['label'] == 'total_requests_per_s'
35+
if metric['label'] == 'total_requests_per_s'
36+
reqs << { framework: metric['framework'], level: metric['level'], value: metric['value'] }
37+
end
3538
end
39+
pp reqs.select { |i| i[:level] == 256 }.sort_by { |i| i[:value] }
3640
end
3741
task :check_failures do
3842
results = JSON.parse(File.read('data.json'))
3943
results['frameworks'].map { _1['label'] }
4044
failing_frameworks = results['metrics'].filter_map do |row|
41-
row['framework_id'] if row['label'] == 'total_requests_per_s' && (row['value']).zero?
45+
row['framework_id'] if row['label'] == 'total_requests_per_s' && row['value'].zero?
4246
end
4347
list_of = Dir.glob('*/*/config.yaml').map { _1.split('/')[1] }
4448
$stdout.puts "Failing : #{results['frameworks'].filter_map do |row|

clojure/pedestal/project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
:license {:name "Eclipse Public License"
55
:url "http://www.eclipse.org/legal/epl-v10.html"}
66
:dependencies [[org.clojure/clojure "1.12.3"]
7-
[io.pedestal/pedestal.service "0.8.0"]
7+
[io.pedestal/pedestal.service "0.8.1"]
88
[io.pedestal/pedestal.jetty "0.8.1"]]
99
:min-lein-version "2.0.0"
1010
:resource-paths []

config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ service: |
3232
providers:
3333
docker:
3434
build:
35-
- cd {{{language}}}/{{{framework}}} && docker build -f {{{manifest}}} -t {{{language}}}.{{{framework}}}.{{{variant}}} . --no-cache && cd -
35+
- cd {{{language}}}/{{{framework}}} && docker build -f {{{manifest}}} -t {{{language}}}.{{{framework}}}.{{{variant}}} . && cd -
3636

3737
metadata:
3838
- docker run -td {{{language}}}.{{{framework}}}.{{{variant}}} --network host > {{{language}}}/{{{framework}}}/cid-{{{variant}}}.txt

0 commit comments

Comments
 (0)