Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
GHC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
gershomb
GHC
Commits
2234fa92
Commit
2234fa92
authored
5 years ago
by
Ben Gamari
Committed by
Marge Bot
5 years ago
Browse files
Options
Downloads
Patches
Plain Diff
gitlab-ci: Pull test metrics before running testsuite
Otherwise the testsuite driver may not have an up-to-date baseline.
parent
48ef6217
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
.gitlab-ci.yml
+6
-4
6 additions, 4 deletions
.gitlab-ci.yml
.gitlab/test-metrics.sh
+70
-48
70 additions, 48 deletions
.gitlab/test-metrics.sh
with
76 additions
and
52 deletions
.gitlab-ci.yml
+
6
−
4
View file @
2234fa92
...
...
@@ -210,10 +210,11 @@ lint-release-changelogs:
export METRICS_FILE=$CI_PROJECT_DIR/performance-metrics.tsv
git config user.email "ben+ghc-ci@smart-cactus.org"
git config user.name "GHC GitLab CI"
-
hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` --docs=no-sphinx test --summary-junit=./junit.xml --test-compiler=$TOP/_build/install/bin/ghc || (.gitlab/push-test-metrics.sh &&
false
)
.gitlab/test-metrics.sh pull
-
hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` --docs=no-sphinx test --summary-junit=./junit.xml --test-compiler=$TOP/_build/install/bin/ghc || (.gitlab/test-metrics.sh push &&
false
)
-
|
# Push git notes.
.gitlab/
push-
test-metrics.sh
.gitlab/test-metrics.sh
push
cache
:
key
:
hadrian
paths
:
...
...
@@ -304,12 +305,13 @@ hadrian-ghc-in-ghci:
METRICS_FILE=$CI_PROJECT_DIR/performance-metrics.tsv
git config user.email "ben+ghc-ci@smart-cactus.org"
git config user.name "GHC GitLab CI"
.gitlab/test-metrics.sh pull
-
|
THREADS=`mk/detect-cpu-count.sh`
make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml METRICS_FILE=$METRICS_FILE || (METRICS_FILE=$METRICS_FILE .gitlab/
push-
test-metrics.sh && false)
make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml METRICS_FILE=$METRICS_FILE || (METRICS_FILE=$METRICS_FILE .gitlab/test-metrics.sh
push
&& false)
-
|
# Push git notes.
METRICS_FILE=$METRICS_FILE .gitlab/
push-
test-metrics.sh
METRICS_FILE=$METRICS_FILE .gitlab/test-metrics.sh
push
dependencies
:
[]
artifacts
:
reports
:
...
...
This diff is collapsed.
Click to expand it.
.gitlab/test-metrics.sh
+
70
−
48
View file @
2234fa92
...
...
@@ -2,66 +2,88 @@
# vim: sw=2 et
set
-euo
pipefail
NOTES_ORIGIN
=
"git@gitlab.haskell.org:ghc/ghc-performance-notes.git"
NOTES_ORIGIN
=
"https://gitlab.haskell.org/ghc/ghc-performance-notes.git"
NOTES_ORIGIN_PUSH
=
"git@gitlab.haskell.org:ghc/ghc-performance-notes.git"
REF
=
"perf"
run
()
{
echo
"
$@
"
$@
}
fail
()
{
echo
"ERROR:
$*
"
>
&2
exit
1
}
# Check that private key is available (Set on all GitLab protected branches).
if
[
-z
${
PERF_NOTE_KEY
+
"
$PERF_NOTE_KEY
"
}
]
then
echo
"Not pushing performance git notes: PERF_NOTE_KEY is not set."
exit
0
fi
# TEST_ENV must be set.
if
[
-z
${
TEST_ENV
+
"
$TEST_ENV
"
}
]
then
fail
"Not pushing performance git notes: TEST_ENV must be set."
fi
# Assert that the METRICS_FILE exists and can be read.
if
[
-z
${
METRICS_FILE
+
"
$METRICS_FILE
"
}
]
then
fail
"
\$
METRICS_FILE not set."
fi
if
!
[
-r
$METRICS_FILE
]
then
fail
"Metrics file not found:
$METRICS_FILE
"
fi
function
pull
()
{
local
ref
=
"refs/notes/
$REF
"
run git fetch
-f
$NOTES_ORIGIN
$ref
:
$ref
echo
"perf notes ref
$ref
is
$(
git rev-parse
$ref
)
"
}
# Add gitlab as a known host.
mkdir
-p
~/.ssh
echo
"|1|+AUrMGS1elvPeLNt+NHGa5+c6pU=|4XvfRsQftO1OgZD4c0JJ7oNaii8= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDXilA5l4kOZPx0nM6xDATF+t4fS6te0eYPDwBI/jLWD9cJVtCnsrwMl5ar+/NfmcD0jnCYztUiVHuXyTaWPJYSQpwltfpTeqpo9/z/0MxkPtSl1uMP2cLbDiqA01OWveChktOXwU6hRQ+7MmO+dNRS/iXrRmYrGv/p1W811QgLBLS9fefEdF25n+0dP71L7Ov7riOawlDmd0C11FraE/R8HX6gs6lbXta1kisdxGyKojYSiCtobUaJxRoatMfUP0a9rwTAyl8tf56LgB+igjMky879VAbL7eQ/AmfHYPrSGJ/YlWP6Jj23Dnos5nOVlWL/rVTs9Y/NakLpPwMs75KTC0Pd74hdf2e3folDdAi2kLrQgO2SI6so7rOYZ+mFkCM751QdDVy4DzjmDvSgSIVf9SV7RQf7e7unE7pSZ/ILupZqz9KhR1MOwVO+ePa5qJMNSdC204PIsRWkIO5KP0QLl507NI9Ri84+aODoHD7gDIWNhU08J2P8/E6r0wcC8uWaxh+HaOjI9BkHjqRYsrgfn54BAuO9kw1cDvyi3c8n7VFlNtvQP15lANwim3gr9upV+r95KEPJCgZMYWJBDPIVtp4GdYxCfXxWj5oMXbA5pf0tNixwNJjAsY7I6RN2htHbuySH36JybOZk+gCj6mQkxpCT/tKaUn14hBJWLq7Q+Q=="
>>
~/.ssh/known_hosts
echo
"|1|JZkdAPJmpX6SzGeqhmQLfMWLGQA=|4vTELroOlbFxbCr0WX+PK9EcpD0= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJknufU+I6A5Nm58lmse4/o11Ai2UzYbYe7782J1+kRk"
>>
~/.ssh/known_hosts
function
setup_ssh
()
{
# Add gitlab as a known host.
mkdir
-p
~/.ssh
echo
"|1|+AUrMGS1elvPeLNt+NHGa5+c6pU=|4XvfRsQftO1OgZD4c0JJ7oNaii8= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDXilA5l4kOZPx0nM6xDATF+t4fS6te0eYPDwBI/jLWD9cJVtCnsrwMl5ar+/NfmcD0jnCYztUiVHuXyTaWPJYSQpwltfpTeqpo9/z/0MxkPtSl1uMP2cLbDiqA01OWveChktOXwU6hRQ+7MmO+dNRS/iXrRmYrGv/p1W811QgLBLS9fefEdF25n+0dP71L7Ov7riOawlDmd0C11FraE/R8HX6gs6lbXta1kisdxGyKojYSiCtobUaJxRoatMfUP0a9rwTAyl8tf56LgB+igjMky879VAbL7eQ/AmfHYPrSGJ/YlWP6Jj23Dnos5nOVlWL/rVTs9Y/NakLpPwMs75KTC0Pd74hdf2e3folDdAi2kLrQgO2SI6so7rOYZ+mFkCM751QdDVy4DzjmDvSgSIVf9SV7RQf7e7unE7pSZ/ILupZqz9KhR1MOwVO+ePa5qJMNSdC204PIsRWkIO5KP0QLl507NI9Ri84+aODoHD7gDIWNhU08J2P8/E6r0wcC8uWaxh+HaOjI9BkHjqRYsrgfn54BAuO9kw1cDvyi3c8n7VFlNtvQP15lANwim3gr9upV+r95KEPJCgZMYWJBDPIVtp4GdYxCfXxWj5oMXbA5pf0tNixwNJjAsY7I6RN2htHbuySH36JybOZk+gCj6mQkxpCT/tKaUn14hBJWLq7Q+Q=="
>>
~/.ssh/known_hosts
echo
"|1|JZkdAPJmpX6SzGeqhmQLfMWLGQA=|4vTELroOlbFxbCr0WX+PK9EcpD0= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJknufU+I6A5Nm58lmse4/o11Ai2UzYbYe7782J1+kRk"
>>
~/.ssh/known_hosts
# Setup ssh keys.
eval
`
ssh-agent
`
echo
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJPR1vrZgeGTXmgJw2PsJfMjf22LcDnVVwt3l0rwTZ+8Q2J0bHaYxMRKBco1sON6LGcZepw0Hy76RQ87v057pTz18SXvnfE7U/B6v9qBk0ILJz+4BOX9sEhxu2XmScp/wMxkG9IoyruMlsxXzd1sz09o+rzzx24U2Rp27PRm08vG0oipve6BWLbYEqYrE4/nCufqOJmGd56fju7OTU0lTpEkGDEDWGMxutaX2CbTbDju7qy07Ld8BjSc9aHfvuQaslUbj3ex3EF8EXahURzGpHQn/UFFzVGMokFumiJCAagHQb7cj6jOkKseZLaysbA/mTBQsOzjWiRmkN23bQf1wF ben+ghc-ci@smart-cactus.org"
>
~/.ssh/perf_rsa.pub
touch
~/.ssh/perf_rsa
chmod
0600 ~/.ssh/perf_rsa
echo
"
$PERF_NOTE_KEY
"
>>
~/.ssh/perf_rsa
ssh-add ~/.ssh/perf_rsa
# Setup ssh keys.
eval
`
ssh-agent
`
echo
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJPR1vrZgeGTXmgJw2PsJfMjf22LcDnVVwt3l0rwTZ+8Q2J0bHaYxMRKBco1sON6LGcZepw0Hy76RQ87v057pTz18SXvnfE7U/B6v9qBk0ILJz+4BOX9sEhxu2XmScp/wMxkG9IoyruMlsxXzd1sz09o+rzzx24U2Rp27PRm08vG0oipve6BWLbYEqYrE4/nCufqOJmGd56fju7OTU0lTpEkGDEDWGMxutaX2CbTbDju7qy07Ld8BjSc9aHfvuQaslUbj3ex3EF8EXahURzGpHQn/UFFzVGMokFumiJCAagHQb7cj6jOkKseZLaysbA/mTBQsOzjWiRmkN23bQf1wF ben+ghc-ci@smart-cactus.org"
>
~/.ssh/perf_rsa.pub
touch
~/.ssh/perf_rsa
chmod
0600 ~/.ssh/perf_rsa
echo
"
$PERF_NOTE_KEY
"
>>
~/.ssh/perf_rsa
ssh-add ~/.ssh/perf_rsa
}
# Reset the git notes and append the metrics file to the notes, then push and return the result.
# This is favoured over a git notes merge as it avoids potential data loss/duplication from the merge strategy.
function
reset_append_note_push
{
git fetch
-f
$NOTES_ORIGIN
refs/notes/
$REF
:refs/notes/
$REF
||
true
echo
"git notes --ref=
$REF
append -F
$METRICS_FILE
HEAD"
git notes
--ref
=
$REF
append
-F
$METRICS_FILE
HEAD
echo
"git push
$NOTES_ORIGIN
refs/notes/
$REF
"
git push
$NOTES_ORIGIN
refs/notes/
$REF
pull
||
true
run git notes
--ref
=
$REF
append
-F
$METRICS_FILE
HEAD
run git push
$NOTES_ORIGIN_PUSH
refs/notes/
$REF
}
function
push
()
{
# Check that private key is available (Set on all GitLab protected branches).
if
[
-z
${
PERF_NOTE_KEY
+
"
$PERF_NOTE_KEY
"
}
]
then
echo
"Not pushing performance git notes: PERF_NOTE_KEY is not set."
exit
0
fi
# TEST_ENV must be set.
if
[
-z
${
TEST_ENV
+
"
$TEST_ENV
"
}
]
then
fail
"Not pushing performance git notes: TEST_ENV must be set."
fi
# Assert that the METRICS_FILE exists and can be read.
if
[
-z
${
METRICS_FILE
+
"
$METRICS_FILE
"
}
]
then
fail
"
\$
METRICS_FILE not set."
fi
if
!
[
-r
$METRICS_FILE
]
then
fail
"Metrics file not found:
$METRICS_FILE
"
fi
setup_ssh
# Push the metrics file as a git note. This may fail if another task pushes a note first. In that case
# the latest note is fetched and appended.
MAX_RETRY
=
20
until
reset_append_note_push
||
[
$MAX_RETRY
-le
0
]
do
((
MAX_RETRY--
))
echo
""
echo
"Failed to push git notes. Fetching, appending, and retrying...
$MAX_RETRY
retries left."
done
}
# Push the metrics file as a git note. This may fail if another task pushes a note first. In that case
# the latest note is fetched and appended.
MAX_RETRY
=
20
until
reset_append_note_push
||
[
$MAX_RETRY
-le
0
]
do
((
MAX_RETRY--
))
echo
""
echo
"Failed to push git notes. Fetching, appending, and retrying...
$MAX_RETRY
retries left."
done
case
$1
in
push
)
push
;;
pull
)
pull
;;
*
)
fail
"Invalid mode
$1
"
;;
esac
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment