mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-04 19:25:51 +00:00
Compare commits
329 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
11edaa441d | ||
|
|
a5e953b191 | ||
|
|
506ae12a8c | ||
|
|
0310c5cbe0 | ||
|
|
053e1af7ff | ||
|
|
7e24adbdd0 | ||
|
|
621df422a7 | ||
|
|
0a34b5c691 | ||
|
|
e0bc3dd51f | ||
|
|
dacecd24ba | ||
|
|
05105743e9 | ||
|
|
9e1fe9a85e | ||
|
|
d71ce51901 | ||
|
|
be668ee26d | ||
|
|
cae5294b4e | ||
|
|
cd777f79ef | ||
|
|
8b9e21e3f5 | ||
|
|
2a61aee562 | ||
|
|
40ce8a8833 | ||
|
|
7713ff8c5c | ||
|
|
70371a4344 | ||
|
|
e514de76ed | ||
|
|
dd62cfcc22 | ||
|
|
09690f1b38 | ||
|
|
380ba9f1c1 | ||
|
|
c3e9380fb4 | ||
|
|
e3ebc253fa | ||
|
|
c6c7c84355 | ||
|
|
28f50cb7cf | ||
|
|
3e152fec74 | ||
|
|
2db2791805 | ||
|
|
9ec2d7f8ff | ||
|
|
4a084ce34c | ||
|
|
3502df2174 | ||
|
|
fa1e25abef | ||
|
|
217ba8dd4d | ||
|
|
405f4613d8 | ||
|
|
cba512068b | ||
|
|
1c99ea23d1 | ||
|
|
c4308b216f | ||
|
|
aafd2d8525 | ||
|
|
a574ec6023 | ||
|
|
e429455f4d | ||
|
|
7692eeb9a0 | ||
|
|
a099f5a804 | ||
|
|
ca0bc767fe | ||
|
|
4ba9288935 | ||
|
|
e923ec6d36 | ||
|
|
851d99d99e | ||
|
|
f608e653ca | ||
|
|
72e076b694 | ||
|
|
6cf37c4abe | ||
|
|
fc204773d6 | ||
|
|
2bc5cb240f | ||
|
|
67028d6ea6 | ||
|
|
d22a5057b9 | ||
|
|
75a20194c5 | ||
|
|
7fe81fe62e | ||
|
|
345ddc7234 | ||
|
|
d167d4864f | ||
|
|
bf504912a4 | ||
|
|
a7fb8ae915 | ||
|
|
d9b7a2688f | ||
|
|
c0299dba88 | ||
|
|
c3ecdb4746 | ||
|
|
c17676a9be | ||
|
|
ed8e32cc92 | ||
|
|
2406b28e64 | ||
|
|
2216e5a13f | ||
|
|
5bf3a308d5 | ||
|
|
53ea31c69a | ||
|
|
c1c2b5bf52 | ||
|
|
af018c7b0b | ||
|
|
0a1ca0600f | ||
|
|
cd7c62818b | ||
|
|
37d06bcce8 | ||
|
|
9745718467 | ||
|
|
ab44cc31e2 | ||
|
|
dce3e1efa6 | ||
|
|
159dfb5acb | ||
|
|
844646dc50 | ||
|
|
01fc8f2209 | ||
|
|
43e1d4440e | ||
|
|
466849efe8 | ||
|
|
db0fad6826 | ||
|
|
dd5e6559dd | ||
|
|
7c9d652d9b | ||
|
|
dc9e6c37fe | ||
|
|
01fe9477f4 | ||
|
|
97e3dae6f4 | ||
|
|
e8e7888a23 | ||
|
|
b02b8d016c | ||
|
|
a079bac153 | ||
|
|
3a55a64e1c | ||
|
|
fa5a85439f | ||
|
|
81034596a8 | ||
|
|
0968cdf340 | ||
|
|
d9e4009e33 | ||
|
|
02387fd227 | ||
|
|
fb3713bc25 | ||
|
|
f6d63082c0 | ||
|
|
33e1c42599 | ||
|
|
1b75dc8bcd | ||
|
|
3d02580c09 | ||
|
|
8458233a31 | ||
|
|
cb0ddbf863 | ||
|
|
dcc4581220 | ||
|
|
50b8f19cb5 | ||
|
|
f3e201f983 | ||
|
|
b14c24960b | ||
|
|
b6e3453f49 | ||
|
|
ed4870cdb4 | ||
|
|
5fbee8c824 | ||
|
|
3868c04e99 | ||
|
|
409c1d5aa2 | ||
|
|
20710f5232 | ||
|
|
870882f567 | ||
|
|
e1e67b2c9e | ||
|
|
eac3abdca9 | ||
|
|
ebd8e63276 | ||
|
|
839d17e7bd | ||
|
|
7be5c31bc6 | ||
|
|
9e4a7d5871 | ||
|
|
ff8b9aa439 | ||
|
|
ccc0889803 | ||
|
|
07f118caec | ||
|
|
58af62f388 | ||
|
|
040cd23e4a | ||
|
|
0324764a83 | ||
|
|
679e35fd46 | ||
|
|
49e0d54c76 | ||
|
|
7506852a99 | ||
|
|
bcbfb04992 | ||
|
|
5cd72f2431 | ||
|
|
eabca8439f | ||
|
|
ea1fffeebf | ||
|
|
6d58065909 | ||
|
|
47b0543461 | ||
|
|
8215c605b4 | ||
|
|
d7e949193f | ||
|
|
f64cf9187a | ||
|
|
b54d85d862 | ||
|
|
f419c18056 | ||
|
|
0ec17b6026 | ||
|
|
838978b869 | ||
|
|
8186253707 | ||
|
|
2316d843d7 | ||
|
|
9d58f11a60 | ||
|
|
7b18006193 | ||
|
|
9e48fc0c83 | ||
|
|
8e827e32ac | ||
|
|
c5c0e70e23 | ||
|
|
ec61f5e9d3 | ||
|
|
d57cced17b | ||
|
|
54a350be79 | ||
|
|
d6dbf0e0a6 | ||
|
|
0d887ad815 | ||
|
|
d4a5f8390e | ||
|
|
ab5d450d3c | ||
|
|
23c37fa506 | ||
|
|
63209c2646 | ||
|
|
f0dabd1446 | ||
|
|
552377c76f | ||
|
|
e7cd03325b | ||
|
|
decb3c178e | ||
|
|
f6d647d6c3 | ||
|
|
bf4a7b6ce8 | ||
|
|
8e2c85d14d | ||
|
|
1fbf8da79f | ||
|
|
a75309919e | ||
|
|
0ece395c24 | ||
|
|
b6391fe011 | ||
|
|
9a6af9c431 | ||
|
|
fa1cbb0746 | ||
|
|
68e1be3cf5 | ||
|
|
9abc4868d6 | ||
|
|
23991c99c3 | ||
|
|
cc0177be87 | ||
|
|
37b3e96b04 | ||
|
|
85214bdf81 | ||
|
|
fbbea9e6e2 | ||
|
|
7741483894 | ||
|
|
2f432e812c | ||
|
|
cad8970a57 | ||
|
|
4d7aed84ec | ||
|
|
00ed7c9424 | ||
|
|
d9bd75e683 | ||
|
|
93d8bafb24 | ||
|
|
c19a88fee9 | ||
|
|
0a331ea72e | ||
|
|
7d27b11190 | ||
|
|
eedfec015e | ||
|
|
ffc343a2bc | ||
|
|
e5aa605742 | ||
|
|
8b181ed818 | ||
|
|
f5a349558e | ||
|
|
b9b75ddcf5 | ||
|
|
a39720e94a | ||
|
|
2820feb02a | ||
|
|
8fc805d2e2 | ||
|
|
d54151e7c4 | ||
|
|
21a0a64648 | ||
|
|
20707fac4a | ||
|
|
e6ef0fc26c | ||
|
|
c157816017 | ||
|
|
eba5d19377 | ||
|
|
ad14d09a2b | ||
|
|
f3bcc651c7 | ||
|
|
e8602b81fa | ||
|
|
0f32109993 | ||
|
|
a17ccca615 | ||
|
|
7a1b238035 | ||
|
|
e1534a3200 | ||
|
|
9fec615dca | ||
|
|
ef02893f2f | ||
|
|
7cf4611d7c | ||
|
|
d028005aa6 | ||
|
|
1d23148e6d | ||
|
|
e416ee72ca | ||
|
|
2e902dee53 | ||
|
|
f6879da6c9 | ||
|
|
ae20a3ad3f | ||
|
|
c706926ee3 | ||
|
|
223e6c7590 | ||
|
|
825864032a | ||
|
|
06733ec21a | ||
|
|
9f7c619e4f | ||
|
|
3f5e3212fe | ||
|
|
20d05492d2 | ||
|
|
ae7ea33b75 | ||
|
|
263e984bf4 | ||
|
|
58f3abe3c6 | ||
|
|
d576416953 | ||
|
|
e3d1bb271f | ||
|
|
2df635693d | ||
|
|
40b4adc9cc | ||
|
|
0c971b4415 | ||
|
|
f2d37da4ca | ||
|
|
d5e5c3c220 | ||
|
|
15390bedd5 | ||
|
|
7f6a079aa4 | ||
|
|
2a25f58d40 | ||
|
|
2705109592 | ||
|
|
244ac5e024 | ||
|
|
f4da2e31d9 | ||
|
|
f650949573 | ||
|
|
76128051c0 | ||
|
|
5aa1106ba1 | ||
|
|
dccf3f49ef | ||
|
|
02ec8b7962 | ||
|
|
3f7ce939c8 | ||
|
|
b65cea1984 | ||
|
|
b422e71eed | ||
|
|
e9859ac1b1 | ||
|
|
b84f7e7c10 | ||
|
|
513842b23f | ||
|
|
985c80fbc6 | ||
|
|
35fe957020 | ||
|
|
0eebe6a5f4 | ||
|
|
760f16f568 | ||
|
|
241b9ddde9 | ||
|
|
3fcfb5cd49 | ||
|
|
e2384885f5 | ||
|
|
dd312c3cc5 | ||
|
|
80379927e8 | ||
|
|
676aae2755 | ||
|
|
f20e66e6f9 | ||
|
|
cd737ad7d3 | ||
|
|
df3aa84523 | ||
|
|
24a275ba25 | ||
|
|
aae438315f | ||
|
|
8b0d049b9f | ||
|
|
659bd99a67 | ||
|
|
c88166e055 | ||
|
|
099c0bcd34 | ||
|
|
d992e63075 | ||
|
|
c187f750fe | ||
|
|
bcbf6c1973 | ||
|
|
4bcbf70cae | ||
|
|
2d1854f354 | ||
|
|
a7c4a47723 | ||
|
|
61672ad3ff | ||
|
|
cea43099d2 | ||
|
|
6edf03c152 | ||
|
|
47c8cc24f4 | ||
|
|
64e46878e0 | ||
|
|
ea9b1e3503 | ||
|
|
2e9261cb26 | ||
|
|
69143d71f8 | ||
|
|
0c32fc5f2a | ||
|
|
af9cabe100 | ||
|
|
2ecb851926 | ||
|
|
2ffead76c1 | ||
|
|
5cc377751a | ||
|
|
ad8e9764e6 | ||
|
|
4ce426d8f6 | ||
|
|
c28e005087 | ||
|
|
22b751834f | ||
|
|
cce09b717e | ||
|
|
62dae3c6c6 | ||
|
|
97863e0b62 | ||
|
|
8a2f6bec33 | ||
|
|
e718378bdb | ||
|
|
d7d15a922a | ||
|
|
e74cb35aa4 | ||
|
|
da68651f61 | ||
|
|
be12136b8a | ||
|
|
6d3c21e369 | ||
|
|
1e96a1d6eb | ||
|
|
828bb64ebc | ||
|
|
6f00d32f7e | ||
|
|
f9e365828a | ||
|
|
90d463b925 | ||
|
|
22cdb5728b | ||
|
|
901152bd93 | ||
|
|
d9a5bca625 | ||
|
|
1676e9fe21 | ||
|
|
fad9d639bf | ||
|
|
efe6722bf8 | ||
|
|
a41f38547b | ||
|
|
87ee7868ea | ||
|
|
861bd1a96e | ||
|
|
6ac2b705dd | ||
|
|
fe4d6c68b5 | ||
|
|
5a7af5bb77 | ||
|
|
d9f90c84c0 | ||
|
|
4308407dc1 | ||
|
|
2b0313d60c | ||
|
|
350d213ee8 |
@@ -44,18 +44,26 @@ DerivePointerAlignment: false
|
|||||||
DisableFormat: false
|
DisableFormat: false
|
||||||
ExperimentalAutoDetectBinPacking: false
|
ExperimentalAutoDetectBinPacking: false
|
||||||
ForEachMacros: [ Q_FOREACH, BOOST_FOREACH ]
|
ForEachMacros: [ Q_FOREACH, BOOST_FOREACH ]
|
||||||
|
IncludeBlocks: Regroup
|
||||||
IncludeCategories:
|
IncludeCategories:
|
||||||
- Regex: '^<(BeastConfig)'
|
- Regex: '^<(test)/'
|
||||||
Priority: 0
|
Priority: 0
|
||||||
- Regex: '^<(ripple)/'
|
- Regex: '^<(xrpld)/'
|
||||||
|
Priority: 1
|
||||||
|
- Regex: '^<(xrpl)/'
|
||||||
Priority: 2
|
Priority: 2
|
||||||
- Regex: '^<(boost)/'
|
- Regex: '^<(boost)/'
|
||||||
Priority: 3
|
Priority: 3
|
||||||
- Regex: '.*'
|
- Regex: '^.*/'
|
||||||
Priority: 4
|
Priority: 4
|
||||||
|
- Regex: '^.*\.h'
|
||||||
|
Priority: 5
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 6
|
||||||
IncludeIsMainRegex: '$'
|
IncludeIsMainRegex: '$'
|
||||||
IndentCaseLabels: true
|
IndentCaseLabels: true
|
||||||
IndentFunctionDeclarationAfterType: false
|
IndentFunctionDeclarationAfterType: false
|
||||||
|
IndentRequiresClause: true
|
||||||
IndentWidth: 4
|
IndentWidth: 4
|
||||||
IndentWrappedFunctionNames: false
|
IndentWrappedFunctionNames: false
|
||||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
@@ -71,6 +79,7 @@ PenaltyExcessCharacter: 1000000
|
|||||||
PenaltyReturnTypeOnItsOwnLine: 200
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
PointerAlignment: Left
|
PointerAlignment: Left
|
||||||
ReflowComments: true
|
ReflowComments: true
|
||||||
|
RequiresClausePosition: OwnLine
|
||||||
SortIncludes: true
|
SortIncludes: true
|
||||||
SpaceAfterCStyleCast: false
|
SpaceAfterCStyleCast: false
|
||||||
SpaceBeforeAssignmentOperators: true
|
SpaceBeforeAssignmentOperators: true
|
||||||
@@ -85,3 +94,4 @@ SpacesInSquareBrackets: false
|
|||||||
Standard: Cpp11
|
Standard: Cpp11
|
||||||
TabWidth: 8
|
TabWidth: 8
|
||||||
UseTab: Never
|
UseTab: Never
|
||||||
|
QualifierAlignment: Right
|
||||||
40
.codecov.yml
40
.codecov.yml
@@ -1,5 +1,37 @@
|
|||||||
|
|
||||||
codecov:
|
codecov:
|
||||||
ci:
|
require_ci_to_pass: true
|
||||||
- !appveyor
|
|
||||||
- travis
|
comment:
|
||||||
|
behavior: default
|
||||||
|
layout: reach,diff,flags,tree,reach
|
||||||
|
show_carryforward_flags: false
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
range: "70..85"
|
||||||
|
precision: 1
|
||||||
|
round: nearest
|
||||||
|
status:
|
||||||
|
project:
|
||||||
|
default:
|
||||||
|
target: 75%
|
||||||
|
threshold: 2%
|
||||||
|
patch:
|
||||||
|
default:
|
||||||
|
target: auto
|
||||||
|
threshold: 2%
|
||||||
|
changes: false
|
||||||
|
|
||||||
|
github_checks:
|
||||||
|
annotations: true
|
||||||
|
|
||||||
|
parsers:
|
||||||
|
cobertura:
|
||||||
|
partials_as_hits: true
|
||||||
|
handle_missing_conditions : true
|
||||||
|
|
||||||
|
slack_app: false
|
||||||
|
|
||||||
|
ignore:
|
||||||
|
- "src/test/"
|
||||||
|
- "include/xrpl/beast/test/"
|
||||||
|
- "include/xrpl/beast/unit_test/"
|
||||||
|
|||||||
@@ -2,3 +2,12 @@
|
|||||||
# To use it by default in git blame:
|
# To use it by default in git blame:
|
||||||
# git config blame.ignoreRevsFile .git-blame-ignore-revs
|
# git config blame.ignoreRevsFile .git-blame-ignore-revs
|
||||||
50760c693510894ca368e90369b0cc2dabfd07f3
|
50760c693510894ca368e90369b0cc2dabfd07f3
|
||||||
|
e2384885f5f630c8f0ffe4bf21a169b433a16858
|
||||||
|
241b9ddde9e11beb7480600fd5ed90e1ef109b21
|
||||||
|
760f16f56835663d9286bd29294d074de26a7ba6
|
||||||
|
0eebe6a5f4246fced516d52b83ec4e7f47373edd
|
||||||
|
2189cc950c0cebb89e4e2fa3b2d8817205bf7cef
|
||||||
|
b9d007813378ad0ff45660dc07285b823c7e9855
|
||||||
|
fe9a5365b8a52d4acc42eb27369247e6f238a4f9
|
||||||
|
9a93577314e6a8d4b4a8368cc9d2b15a5d8303e8
|
||||||
|
552377c76f55b403a1c876df873a23d780fcc81c
|
||||||
|
|||||||
8
.github/CODEOWNERS
vendored
Normal file
8
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Allow anyone to review any change by default.
|
||||||
|
*
|
||||||
|
|
||||||
|
# Require the rpc-reviewers team to review changes to the rpc code.
|
||||||
|
include/xrpl/protocol/ @xrplf/rpc-reviewers
|
||||||
|
src/libxrpl/protocol/ @xrplf/rpc-reviewers
|
||||||
|
src/xrpld/rpc/ @xrplf/rpc-reviewers
|
||||||
|
src/xrpld/app/misc/ @xrplf/rpc-reviewers
|
||||||
7
.github/actions/build/action.yml
vendored
7
.github/actions/build/action.yml
vendored
@@ -6,6 +6,8 @@ inputs:
|
|||||||
required: true
|
required: true
|
||||||
cmake-args:
|
cmake-args:
|
||||||
default: null
|
default: null
|
||||||
|
cmake-target:
|
||||||
|
default: all
|
||||||
# An implicit input is the environment variable `build_dir`.
|
# An implicit input is the environment variable `build_dir`.
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
@@ -18,6 +20,8 @@ runs:
|
|||||||
${{ inputs.generator && format('-G "{0}"', inputs.generator) || '' }} \
|
${{ inputs.generator && format('-G "{0}"', inputs.generator) || '' }} \
|
||||||
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
|
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
|
||||||
-DCMAKE_BUILD_TYPE=${{ inputs.configuration }} \
|
-DCMAKE_BUILD_TYPE=${{ inputs.configuration }} \
|
||||||
|
-Dtests=TRUE \
|
||||||
|
-Dxrpld=TRUE \
|
||||||
${{ inputs.cmake-args }} \
|
${{ inputs.cmake-args }} \
|
||||||
..
|
..
|
||||||
- name: build
|
- name: build
|
||||||
@@ -26,4 +30,5 @@ runs:
|
|||||||
cmake \
|
cmake \
|
||||||
--build ${build_dir} \
|
--build ${build_dir} \
|
||||||
--config ${{ inputs.configuration }} \
|
--config ${{ inputs.configuration }} \
|
||||||
--parallel ${NUM_PROCESSORS:-$(nproc)}
|
--parallel ${NUM_PROCESSORS:-$(nproc)} \
|
||||||
|
--target ${{ inputs.cmake-target }}
|
||||||
|
|||||||
31
.github/actions/dependencies/action.yml
vendored
31
.github/actions/dependencies/action.yml
vendored
@@ -12,8 +12,37 @@ runs:
|
|||||||
- name: export custom recipes
|
- name: export custom recipes
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
conan config set general.revisions_enabled=1
|
||||||
conan export external/snappy snappy/1.1.10@
|
conan export external/snappy snappy/1.1.10@
|
||||||
|
conan export external/rocksdb rocksdb/9.7.3@
|
||||||
conan export external/soci soci/4.0.3@
|
conan export external/soci soci/4.0.3@
|
||||||
|
conan export external/nudb nudb/2.0.8@
|
||||||
|
- name: add Ripple Conan remote
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
conan remote list
|
||||||
|
conan remote remove ripple || true
|
||||||
|
# Do not quote the URL. An empty string will be accepted (with
|
||||||
|
# a non-fatal warning), but a missing argument will not.
|
||||||
|
conan remote add ripple ${{ env.CONAN_URL }} --insert 0
|
||||||
|
- name: try to authenticate to Ripple Conan remote
|
||||||
|
id: remote
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
# `conan user` implicitly uses the environment variables
|
||||||
|
# CONAN_LOGIN_USERNAME_<REMOTE> and CONAN_PASSWORD_<REMOTE>.
|
||||||
|
# https://docs.conan.io/1/reference/commands/misc/user.html#using-environment-variables
|
||||||
|
# https://docs.conan.io/1/reference/env_vars.html#conan-login-username-conan-login-username-remote-name
|
||||||
|
# https://docs.conan.io/1/reference/env_vars.html#conan-password-conan-password-remote-name
|
||||||
|
echo outcome=$(conan user --remote ripple --password >&2 \
|
||||||
|
&& echo success || echo failure) | tee ${GITHUB_OUTPUT}
|
||||||
|
- name: list missing binaries
|
||||||
|
id: binaries
|
||||||
|
shell: bash
|
||||||
|
# Print the list of dependencies that would need to be built locally.
|
||||||
|
# A non-empty list means we have "failed" to cache binaries remotely.
|
||||||
|
run: |
|
||||||
|
echo missing=$(conan info . --build missing --settings build_type=${{ inputs.configuration }} --json 2>/dev/null | grep '^\[') | tee ${GITHUB_OUTPUT}
|
||||||
- name: install dependencies
|
- name: install dependencies
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
@@ -22,5 +51,7 @@ runs:
|
|||||||
conan install \
|
conan install \
|
||||||
--output-folder . \
|
--output-folder . \
|
||||||
--build missing \
|
--build missing \
|
||||||
|
--options tests=True \
|
||||||
|
--options xrpld=True \
|
||||||
--settings build_type=${{ inputs.configuration }} \
|
--settings build_type=${{ inputs.configuration }} \
|
||||||
..
|
..
|
||||||
|
|||||||
13
.github/pull_request_template.md
vendored
13
.github/pull_request_template.md
vendored
@@ -1,6 +1,12 @@
|
|||||||
<!--
|
<!--
|
||||||
This PR template helps you to write a good pull request description.
|
This PR template helps you to write a good pull request description.
|
||||||
Please feel free to include additional useful information even beyond what is requested below.
|
Please feel free to include additional useful information even beyond what is requested below.
|
||||||
|
|
||||||
|
If your branch is on a personal fork and has a name that allows it to
|
||||||
|
run CI build/test jobs (e.g. "ci/foo"), remember to rename it BEFORE
|
||||||
|
opening the PR. This avoids unnecessary redundant test runs. Renaming
|
||||||
|
the branch after opening the PR will close the PR.
|
||||||
|
https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch
|
||||||
-->
|
-->
|
||||||
|
|
||||||
## High Level Overview of Change
|
## High Level Overview of Change
|
||||||
@@ -33,6 +39,7 @@ Please check [x] relevant options, delete irrelevant ones.
|
|||||||
- [ ] New feature (non-breaking change which adds functionality)
|
- [ ] New feature (non-breaking change which adds functionality)
|
||||||
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
|
||||||
- [ ] Refactor (non-breaking change that only restructures code)
|
- [ ] Refactor (non-breaking change that only restructures code)
|
||||||
|
- [ ] Performance (increase or change in throughput and/or latency)
|
||||||
- [ ] Tests (you added tests for code that already exists, or your new feature included in this PR)
|
- [ ] Tests (you added tests for code that already exists, or your new feature included in this PR)
|
||||||
- [ ] Documentation update
|
- [ ] Documentation update
|
||||||
- [ ] Chore (no impact to binary, e.g. `.gitignore`, formatting, dropping support for older tooling)
|
- [ ] Chore (no impact to binary, e.g. `.gitignore`, formatting, dropping support for older tooling)
|
||||||
@@ -58,6 +65,12 @@ Please check [x] relevant options, delete irrelevant ones.
|
|||||||
## Before / After
|
## Before / After
|
||||||
If relevant, use this section for an English description of the change at a technical level.
|
If relevant, use this section for an English description of the change at a technical level.
|
||||||
If this change affects an API, examples should be included here.
|
If this change affects an API, examples should be included here.
|
||||||
|
|
||||||
|
For performance-impacting changes, please provide these details:
|
||||||
|
1. Is this a new feature, bug fix, or improvement to existing functionality?
|
||||||
|
2. What behavior/functionality does the change impact?
|
||||||
|
3. In what processing can the impact be measured? Be as specific as possible - e.g. RPC client call, payment transaction that involves LOB, AMM, caching, DB operations, etc.
|
||||||
|
4. Does this change affect concurrent processing - e.g. does it involve acquiring locks, multi-threaded processing, or async processing?
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|||||||
22
.github/workflows/clang-format.yml
vendored
22
.github/workflows/clang-format.yml
vendored
@@ -1,14 +1,18 @@
|
|||||||
name: clang-format
|
name: clang-format
|
||||||
|
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, synchronize, ready_for_review]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
runs-on: ubuntu-20.04
|
if: ${{ github.event_name == 'push' || github.event.pull_request.draft != true || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') }}
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
env:
|
env:
|
||||||
CLANG_VERSION: 10
|
CLANG_VERSION: 18
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Install clang-format
|
- name: Install clang-format
|
||||||
run: |
|
run: |
|
||||||
codename=$( lsb_release --codename --short )
|
codename=$( lsb_release --codename --short )
|
||||||
@@ -19,10 +23,8 @@ jobs:
|
|||||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add
|
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install clang-format-${CLANG_VERSION}
|
sudo apt-get install clang-format-${CLANG_VERSION}
|
||||||
- name: Format src/ripple
|
- name: Format first-party sources
|
||||||
run: find src/ripple -type f \( -name '*.cpp' -o -name '*.h' -o -name '*.ipp' \) -print0 | xargs -0 clang-format-${CLANG_VERSION} -i
|
run: find include src tests -type f \( -name '*.cpp' -o -name '*.hpp' -o -name '*.h' -o -name '*.ipp' \) -exec clang-format-${CLANG_VERSION} -i {} +
|
||||||
- name: Format src/test
|
|
||||||
run: find src/test -type f \( -name '*.cpp' -o -name '*.h' -o -name '*.ipp' \) -print0 | xargs -0 clang-format-${CLANG_VERSION} -i
|
|
||||||
- name: Check for differences
|
- name: Check for differences
|
||||||
id: assert
|
id: assert
|
||||||
run: |
|
run: |
|
||||||
@@ -30,7 +32,7 @@ jobs:
|
|||||||
git diff --exit-code | tee "clang-format.patch"
|
git diff --exit-code | tee "clang-format.patch"
|
||||||
- name: Upload patch
|
- name: Upload patch
|
||||||
if: failure() && steps.assert.outcome == 'failure'
|
if: failure() && steps.assert.outcome == 'failure'
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v4
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
name: clang-format.patch
|
name: clang-format.patch
|
||||||
@@ -52,7 +54,7 @@ jobs:
|
|||||||
To fix it, you can do one of two things:
|
To fix it, you can do one of two things:
|
||||||
1. Download and apply the patch generated as an artifact of this
|
1. Download and apply the patch generated as an artifact of this
|
||||||
job to your repo, commit, and push.
|
job to your repo, commit, and push.
|
||||||
2. Run 'git-clang-format --extensions c,cpp,h,cxx,ipp develop'
|
2. Run 'git-clang-format --extensions cpp,h,hpp,ipp develop'
|
||||||
in your repo, commit, and push.
|
in your repo, commit, and push.
|
||||||
run: |
|
run: |
|
||||||
echo "${PREAMBLE}"
|
echo "${PREAMBLE}"
|
||||||
|
|||||||
8
.github/workflows/doxygen.yml
vendored
8
.github/workflows/doxygen.yml
vendored
@@ -4,20 +4,20 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- develop
|
- develop
|
||||||
|
- doxygen
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
job:
|
documentation:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
container:
|
container: ghcr.io/xrplf/rippled-build-ubuntu:aaf5e3e
|
||||||
image: docker://rippleci/rippled-ci-builder:2944b78d22db
|
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: check environment
|
- name: check environment
|
||||||
run: |
|
run: |
|
||||||
echo ${PATH} | tr ':' '\n'
|
echo ${PATH} | tr ':' '\n'
|
||||||
|
|||||||
10
.github/workflows/levelization.yml
vendored
10
.github/workflows/levelization.yml
vendored
@@ -1,14 +1,18 @@
|
|||||||
name: levelization
|
name: levelization
|
||||||
|
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, synchronize, ready_for_review]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
|
if: ${{ github.event_name == 'push' || github.event.pull_request.draft != true || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
CLANG_VERSION: 10
|
CLANG_VERSION: 10
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Check levelization
|
- name: Check levelization
|
||||||
run: Builds/levelization/levelization.sh
|
run: Builds/levelization/levelization.sh
|
||||||
- name: Check for differences
|
- name: Check for differences
|
||||||
@@ -18,7 +22,7 @@ jobs:
|
|||||||
git diff --exit-code | tee "levelization.patch"
|
git diff --exit-code | tee "levelization.patch"
|
||||||
- name: Upload patch
|
- name: Upload patch
|
||||||
if: failure() && steps.assert.outcome == 'failure'
|
if: failure() && steps.assert.outcome == 'failure'
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v4
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
name: levelization.patch
|
name: levelization.patch
|
||||||
|
|||||||
91
.github/workflows/libxrpl.yml
vendored
Normal file
91
.github/workflows/libxrpl.yml
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
name: Check libXRPL compatibility with Clio
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
CONAN_LOGIN_USERNAME_RIPPLE: ${{ secrets.CONAN_USERNAME }}
|
||||||
|
CONAN_PASSWORD_RIPPLE: ${{ secrets.CONAN_TOKEN }}
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- 'src/libxrpl/protocol/BuildInfo.cpp'
|
||||||
|
- '.github/workflows/libxrpl.yml'
|
||||||
|
types: [opened, reopened, synchronize, ready_for_review]
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
if: ${{ github.event_name == 'push' || github.event.pull_request.draft != true || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') }}
|
||||||
|
name: Publish libXRPL
|
||||||
|
outputs:
|
||||||
|
outcome: ${{ steps.upload.outputs.outcome }}
|
||||||
|
version: ${{ steps.version.outputs.version }}
|
||||||
|
channel: ${{ steps.channel.outputs.channel }}
|
||||||
|
runs-on: [self-hosted, heavy]
|
||||||
|
container: ghcr.io/xrplf/rippled-build-ubuntu:aaf5e3e
|
||||||
|
steps:
|
||||||
|
- name: Wait for essential checks to succeed
|
||||||
|
uses: lewagon/wait-on-check-action@v1.3.4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
|
running-workflow-name: wait-for-check-regexp
|
||||||
|
check-regexp: '(dependencies|test).*linux.*' # Ignore windows and mac tests but make sure linux passes
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
wait-interval: 10
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Generate channel
|
||||||
|
id: channel
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo channel="clio/pr_${{ github.event.pull_request.number }}" | tee ${GITHUB_OUTPUT}
|
||||||
|
- name: Export new package
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
conan export . ${{ steps.channel.outputs.channel }}
|
||||||
|
- name: Add Ripple Conan remote
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
conan remote list
|
||||||
|
conan remote remove ripple || true
|
||||||
|
# Do not quote the URL. An empty string will be accepted (with a non-fatal warning), but a missing argument will not.
|
||||||
|
conan remote add ripple ${{ env.CONAN_URL }} --insert 0
|
||||||
|
- name: Parse new version
|
||||||
|
id: version
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo version="$(cat src/libxrpl/protocol/BuildInfo.cpp | grep "versionString =" \
|
||||||
|
| awk -F '"' '{print $2}')" | tee ${GITHUB_OUTPUT}
|
||||||
|
- name: Try to authenticate to Ripple Conan remote
|
||||||
|
id: remote
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
# `conan user` implicitly uses the environment variables CONAN_LOGIN_USERNAME_<REMOTE> and CONAN_PASSWORD_<REMOTE>.
|
||||||
|
# https://docs.conan.io/1/reference/commands/misc/user.html#using-environment-variables
|
||||||
|
# https://docs.conan.io/1/reference/env_vars.html#conan-login-username-conan-login-username-remote-name
|
||||||
|
# https://docs.conan.io/1/reference/env_vars.html#conan-password-conan-password-remote-name
|
||||||
|
echo outcome=$(conan user --remote ripple --password >&2 \
|
||||||
|
&& echo success || echo failure) | tee ${GITHUB_OUTPUT}
|
||||||
|
- name: Upload new package
|
||||||
|
id: upload
|
||||||
|
if: (steps.remote.outputs.outcome == 'success')
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "conan upload version ${{ steps.version.outputs.version }} on channel ${{ steps.channel.outputs.channel }}"
|
||||||
|
echo outcome=$(conan upload xrpl/${{ steps.version.outputs.version }}@${{ steps.channel.outputs.channel }} --remote ripple --confirm >&2 \
|
||||||
|
&& echo success || echo failure) | tee ${GITHUB_OUTPUT}
|
||||||
|
notify_clio:
|
||||||
|
name: Notify Clio
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: publish
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.CLIO_NOTIFY_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- name: Notify Clio about new version
|
||||||
|
if: (needs.publish.outputs.outcome == 'success')
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
gh api --method POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" \
|
||||||
|
/repos/xrplf/clio/dispatches -f "event_type=check_libxrpl" \
|
||||||
|
-F "client_payload[version]=${{ needs.publish.outputs.version }}@${{ needs.publish.outputs.channel }}" \
|
||||||
|
-F "client_payload[pr]=${{ github.event.pull_request.number }}"
|
||||||
62
.github/workflows/macos.yml
vendored
62
.github/workflows/macos.yml
vendored
@@ -1,5 +1,17 @@
|
|||||||
name: macos
|
name: macos
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, synchronize, ready_for_review]
|
||||||
|
push:
|
||||||
|
# If the branches list is ever changed, be sure to change it on all
|
||||||
|
# build/test jobs (nix, macos, windows, instrumentation)
|
||||||
|
branches:
|
||||||
|
# Always build the package branches
|
||||||
|
- develop
|
||||||
|
- release
|
||||||
|
- master
|
||||||
|
# Branches that opt-in to running
|
||||||
|
- 'ci/**'
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
@@ -7,6 +19,7 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
if: ${{ github.event_name == 'push' || github.event.pull_request.draft != true || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
platform:
|
platform:
|
||||||
@@ -22,23 +35,55 @@ jobs:
|
|||||||
NUM_PROCESSORS: 12
|
NUM_PROCESSORS: 12
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
- name: install Conan
|
||||||
|
run: |
|
||||||
|
brew install conan@1
|
||||||
|
echo '/opt/homebrew/opt/conan@1/bin' >> $GITHUB_PATH
|
||||||
- name: install Ninja
|
- name: install Ninja
|
||||||
if: matrix.generator == 'Ninja'
|
if: matrix.generator == 'Ninja'
|
||||||
run: brew install ninja
|
run: brew install ninja
|
||||||
|
- name: install python
|
||||||
|
run: |
|
||||||
|
if which python > /dev/null 2>&1; then
|
||||||
|
echo "Python executable exists"
|
||||||
|
else
|
||||||
|
brew install python@3.13
|
||||||
|
ln -s /opt/homebrew/bin/python3 /opt/homebrew/bin/python
|
||||||
|
fi
|
||||||
|
- name: install cmake
|
||||||
|
run: |
|
||||||
|
if which cmake > /dev/null 2>&1; then
|
||||||
|
echo "cmake executable exists"
|
||||||
|
else
|
||||||
|
brew install cmake
|
||||||
|
fi
|
||||||
|
- name: install nproc
|
||||||
|
run: |
|
||||||
|
brew install coreutils
|
||||||
- name: check environment
|
- name: check environment
|
||||||
run: |
|
run: |
|
||||||
|
env | sort
|
||||||
echo ${PATH} | tr ':' '\n'
|
echo ${PATH} | tr ':' '\n'
|
||||||
python --version
|
python --version
|
||||||
conan --version
|
conan --version
|
||||||
cmake --version
|
cmake --version
|
||||||
env | sort
|
nproc --version
|
||||||
|
echo -n "nproc returns: "
|
||||||
|
nproc
|
||||||
|
system_profiler SPHardwareDataType
|
||||||
|
sysctl -n hw.logicalcpu
|
||||||
|
clang --version
|
||||||
- name: configure Conan
|
- name: configure Conan
|
||||||
run : |
|
run : |
|
||||||
conan profile get env.CXXFLAGS default || true
|
conan profile new default --detect || true
|
||||||
conan profile update 'conf.tools.build:cxxflags+=["-DBOOST_ASIO_DISABLE_CONCEPTS"]' default
|
conan profile update settings.compiler.cppstd=20 default
|
||||||
- name: dependencies
|
- name: build dependencies
|
||||||
uses: ./.github/actions/dependencies
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
CONAN_LOGIN_USERNAME_RIPPLE: ${{ secrets.CONAN_USERNAME }}
|
||||||
|
CONAN_PASSWORD_RIPPLE: ${{ secrets.CONAN_TOKEN }}
|
||||||
with:
|
with:
|
||||||
configuration: ${{ matrix.configuration }}
|
configuration: ${{ matrix.configuration }}
|
||||||
- name: build
|
- name: build
|
||||||
@@ -46,6 +91,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
generator: ${{ matrix.generator }}
|
generator: ${{ matrix.generator }}
|
||||||
configuration: ${{ matrix.configuration }}
|
configuration: ${{ matrix.configuration }}
|
||||||
|
cmake-args: "-Dassert=TRUE -Dwerr=TRUE ${{ matrix.cmake-args }}"
|
||||||
- name: test
|
- name: test
|
||||||
run: |
|
run: |
|
||||||
${build_dir}/rippled --unittest
|
n=$(nproc)
|
||||||
|
echo "Using $n test jobs"
|
||||||
|
${build_dir}/rippled --unittest --unittest-jobs $n
|
||||||
|
|||||||
60
.github/workflows/missing-commits.yml
vendored
Normal file
60
.github/workflows/missing-commits.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
name: missing-commits
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
# Only check that the branches are up to date when updating the
|
||||||
|
# relevant branches.
|
||||||
|
- develop
|
||||||
|
- release
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
up_to_date:
|
||||||
|
runs-on: ubuntu-24.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Check for missing commits
|
||||||
|
id: commits
|
||||||
|
env:
|
||||||
|
SUGGESTION: |
|
||||||
|
|
||||||
|
If you are reading this, then the commits indicated above are
|
||||||
|
missing from "develop" and/or "release". Do a reverse-merge
|
||||||
|
as soon as possible. See CONTRIBUTING.md for instructions.
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
# Branches ordered by how "canonical" they are. Every commit in
|
||||||
|
# one branch should be in all the branches behind it
|
||||||
|
order=( master release develop )
|
||||||
|
branches=()
|
||||||
|
for branch in "${order[@]}"
|
||||||
|
do
|
||||||
|
# Check that the branches exist so that this job will work on
|
||||||
|
# forked repos, which don't necessarily have master and
|
||||||
|
# release branches.
|
||||||
|
if git ls-remote --exit-code --heads origin \
|
||||||
|
refs/heads/${branch} > /dev/null
|
||||||
|
then
|
||||||
|
branches+=( origin/${branch} )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
prior=()
|
||||||
|
for branch in "${branches[@]}"
|
||||||
|
do
|
||||||
|
if [[ ${#prior[@]} -ne 0 ]]
|
||||||
|
then
|
||||||
|
echo "Checking ${prior[@]} for commits missing from ${branch}"
|
||||||
|
git log --oneline --no-merges "${prior[@]}" \
|
||||||
|
^$branch | tee -a "missing-commits.txt"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
prior+=( "${branch}" )
|
||||||
|
done
|
||||||
|
if [[ $( cat missing-commits.txt | wc -l ) -ne 0 ]]
|
||||||
|
then
|
||||||
|
echo "${SUGGESTION}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
362
.github/workflows/nix.yml
vendored
362
.github/workflows/nix.yml
vendored
@@ -1,12 +1,24 @@
|
|||||||
name: nix
|
name: nix
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, synchronize, ready_for_review]
|
||||||
|
push:
|
||||||
|
# If the branches list is ever changed, be sure to change it on all
|
||||||
|
# build/test jobs (nix, macos, windows)
|
||||||
|
branches:
|
||||||
|
# Always build the package branches
|
||||||
|
- develop
|
||||||
|
- release
|
||||||
|
- master
|
||||||
|
# Branches that opt-in to running
|
||||||
|
- "ci/**"
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
# This workflow has two job matrixes.
|
# This workflow has multiple job matrixes.
|
||||||
# They can be considered phases because the second matrix ("test")
|
# They can be considered phases because most of the matrices ("test",
|
||||||
# depends on the first ("dependencies").
|
# "coverage", "conan", ) depend on the first ("dependencies").
|
||||||
#
|
#
|
||||||
# The first phase has a job in the matrix for each combination of
|
# The first phase has a job in the matrix for each combination of
|
||||||
# variables that affects dependency ABI:
|
# variables that affects dependency ABI:
|
||||||
@@ -19,13 +31,16 @@ concurrency:
|
|||||||
# to hold the binaries if they are built locally.
|
# to hold the binaries if they are built locally.
|
||||||
# We must use the "{upload,download}-artifact" actions instead.
|
# We must use the "{upload,download}-artifact" actions instead.
|
||||||
#
|
#
|
||||||
# The second phase has a job in the matrix for each test configuration.
|
# The remaining phases have a job in the matrix for each test
|
||||||
# It installs dependency binaries from the cache, whichever was used,
|
# configuration. They install dependency binaries from the cache,
|
||||||
# and builds and tests rippled.
|
# whichever was used, and build and test rippled.
|
||||||
|
#
|
||||||
|
# "instrumentation" is independent, but is included here because it also
|
||||||
|
# builds on linux in the same "on:" conditions.
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
|
if: ${{ github.event_name == 'push' || github.event.pull_request.draft != true || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -49,21 +64,24 @@ jobs:
|
|||||||
cc: /usr/bin/clang-14
|
cc: /usr/bin/clang-14
|
||||||
cxx: /usr/bin/clang++-14
|
cxx: /usr/bin/clang++-14
|
||||||
runs-on: [self-hosted, heavy]
|
runs-on: [self-hosted, heavy]
|
||||||
container: thejohnfreeman/rippled-build-ubuntu:12e19cd9034b
|
container: ghcr.io/xrplf/rippled-build-ubuntu:aaf5e3e
|
||||||
env:
|
env:
|
||||||
build_dir: .build
|
build_dir: .build
|
||||||
steps:
|
steps:
|
||||||
|
- name: upgrade conan
|
||||||
|
run: |
|
||||||
|
pip install --upgrade "conan<2"
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: check environment
|
- name: check environment
|
||||||
run: |
|
run: |
|
||||||
echo ${PATH} | tr ':' '\n'
|
echo ${PATH} | tr ':' '\n'
|
||||||
|
lsb_release -a || true
|
||||||
|
${{ matrix.profile.cc }} --version
|
||||||
conan --version
|
conan --version
|
||||||
cmake --version
|
cmake --version
|
||||||
env | sort
|
env | sort
|
||||||
- name: configure Conan
|
- name: configure Conan
|
||||||
env:
|
|
||||||
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
|
||||||
run: |
|
run: |
|
||||||
conan profile new default --detect
|
conan profile new default --detect
|
||||||
conan profile update settings.compiler.cppstd=20 default
|
conan profile update settings.compiler.cppstd=20 default
|
||||||
@@ -73,41 +91,24 @@ jobs:
|
|||||||
conan profile update env.CC=${{ matrix.profile.cc }} default
|
conan profile update env.CC=${{ matrix.profile.cc }} default
|
||||||
conan profile update env.CXX=${{ matrix.profile.cxx }} default
|
conan profile update env.CXX=${{ matrix.profile.cxx }} default
|
||||||
conan profile update conf.tools.build:compiler_executables='{"c": "${{ matrix.profile.cc }}", "cpp": "${{ matrix.profile.cxx }}"}' default
|
conan profile update conf.tools.build:compiler_executables='{"c": "${{ matrix.profile.cc }}", "cpp": "${{ matrix.profile.cxx }}"}' default
|
||||||
# Do not quote the URL. An empty string will be accepted (with
|
|
||||||
# a non-fatal warning), but a missing argument will not.
|
|
||||||
conan remote add ripple ${{ env.CONAN_URL }} --insert 0
|
|
||||||
- name: try to authenticate to ripple Conan remote
|
|
||||||
id: remote
|
|
||||||
run: |
|
|
||||||
echo outcome=$(conan user --remote ripple ${{ secrets.CONAN_USERNAME }} --password ${{ secrets.CONAN_TOKEN }} >&2 && echo success || echo failure) | tee ${GITHUB_OUTPUT}
|
|
||||||
- name: archive profile
|
- name: archive profile
|
||||||
# Create this archive before dependencies are added to the local cache.
|
# Create this archive before dependencies are added to the local cache.
|
||||||
run: tar -czf conan.tar -C ~/.conan .
|
run: tar -czf conan.tar -C ~/.conan .
|
||||||
- name: list missing binaries
|
|
||||||
id: binaries
|
|
||||||
# Print the list of dependencies that would need to be built locally.
|
|
||||||
# A non-empty list means we have "failed" to cache binaries remotely.
|
|
||||||
run: |
|
|
||||||
echo missing=$(conan info . --build missing --settings build_type=${{ matrix.configuration }} --json 2>/dev/null | grep '^\[') | tee ${GITHUB_OUTPUT}
|
|
||||||
- name: build dependencies
|
- name: build dependencies
|
||||||
if: (steps.binaries.outputs.missing != '[]')
|
|
||||||
uses: ./.github/actions/dependencies
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
CONAN_LOGIN_USERNAME_RIPPLE: ${{ secrets.CONAN_USERNAME }}
|
||||||
|
CONAN_PASSWORD_RIPPLE: ${{ secrets.CONAN_TOKEN }}
|
||||||
with:
|
with:
|
||||||
configuration: ${{ matrix.configuration }}
|
configuration: ${{ matrix.configuration }}
|
||||||
- name: upload dependencies to remote
|
|
||||||
if: (steps.binaries.outputs.missing != '[]') && (steps.remote.outputs.outcome == 'success')
|
|
||||||
run: conan upload --remote ripple '*' --all --parallel --confirm
|
|
||||||
- name: recreate archive with dependencies
|
|
||||||
if: (steps.binaries.outputs.missing != '[]') && (steps.remote.outputs.outcome == 'failure')
|
|
||||||
run: tar -czf conan.tar -C ~/.conan .
|
|
||||||
- name: upload archive
|
- name: upload archive
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.platform }}-${{ matrix.compiler }}-${{ matrix.configuration }}
|
name: ${{ matrix.platform }}-${{ matrix.compiler }}-${{ matrix.configuration }}
|
||||||
path: conan.tar
|
path: conan.tar
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
|
|
||||||
test:
|
test:
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@@ -125,12 +126,15 @@ jobs:
|
|||||||
- "-Dunity=ON"
|
- "-Dunity=ON"
|
||||||
needs: dependencies
|
needs: dependencies
|
||||||
runs-on: [self-hosted, heavy]
|
runs-on: [self-hosted, heavy]
|
||||||
container: thejohnfreeman/rippled-build-ubuntu:12e19cd9034b
|
container: ghcr.io/xrplf/rippled-build-ubuntu:aaf5e3e
|
||||||
env:
|
env:
|
||||||
build_dir: .build
|
build_dir: .build
|
||||||
steps:
|
steps:
|
||||||
|
- name: upgrade conan
|
||||||
|
run: |
|
||||||
|
pip install --upgrade "conan<2"
|
||||||
- name: download cache
|
- name: download cache
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.platform }}-${{ matrix.compiler }}-${{ matrix.configuration }}
|
name: ${{ matrix.platform }}-${{ matrix.compiler }}-${{ matrix.configuration }}
|
||||||
- name: extract cache
|
- name: extract cache
|
||||||
@@ -139,15 +143,16 @@ jobs:
|
|||||||
tar -xzf conan.tar -C ~/.conan
|
tar -xzf conan.tar -C ~/.conan
|
||||||
- name: check environment
|
- name: check environment
|
||||||
run: |
|
run: |
|
||||||
|
env | sort
|
||||||
echo ${PATH} | tr ':' '\n'
|
echo ${PATH} | tr ':' '\n'
|
||||||
conan --version
|
conan --version
|
||||||
cmake --version
|
cmake --version
|
||||||
env | sort
|
|
||||||
ls ~/.conan
|
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: dependencies
|
- name: dependencies
|
||||||
uses: ./.github/actions/dependencies
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
with:
|
with:
|
||||||
configuration: ${{ matrix.configuration }}
|
configuration: ${{ matrix.configuration }}
|
||||||
- name: build
|
- name: build
|
||||||
@@ -155,7 +160,284 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
generator: Ninja
|
generator: Ninja
|
||||||
configuration: ${{ matrix.configuration }}
|
configuration: ${{ matrix.configuration }}
|
||||||
cmake-args: ${{ matrix.cmake-args }}
|
cmake-args: "-Dassert=TRUE -Dwerr=TRUE ${{ matrix.cmake-args }}"
|
||||||
- name: test
|
- name: test
|
||||||
run: |
|
run: |
|
||||||
${build_dir}/rippled --unittest --unittest-jobs $(nproc)
|
${build_dir}/rippled --unittest --unittest-jobs $(nproc)
|
||||||
|
|
||||||
|
reference-fee-test:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
platform:
|
||||||
|
- linux
|
||||||
|
compiler:
|
||||||
|
- gcc
|
||||||
|
configuration:
|
||||||
|
- Debug
|
||||||
|
cmake-args:
|
||||||
|
- "-DUNIT_TEST_REFERENCE_FEE=200"
|
||||||
|
- "-DUNIT_TEST_REFERENCE_FEE=1000"
|
||||||
|
needs: dependencies
|
||||||
|
runs-on: [self-hosted, heavy]
|
||||||
|
container: ghcr.io/xrplf/rippled-build-ubuntu:aaf5e3e
|
||||||
|
env:
|
||||||
|
build_dir: .build
|
||||||
|
steps:
|
||||||
|
- name: upgrade conan
|
||||||
|
run: |
|
||||||
|
pip install --upgrade "conan<2"
|
||||||
|
- name: download cache
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.platform }}-${{ matrix.compiler }}-${{ matrix.configuration }}
|
||||||
|
- name: extract cache
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.conan
|
||||||
|
tar -xzf conan.tar -C ~/.conan
|
||||||
|
- name: check environment
|
||||||
|
run: |
|
||||||
|
env | sort
|
||||||
|
echo ${PATH} | tr ':' '\n'
|
||||||
|
conan --version
|
||||||
|
cmake --version
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: dependencies
|
||||||
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
with:
|
||||||
|
configuration: ${{ matrix.configuration }}
|
||||||
|
- name: build
|
||||||
|
uses: ./.github/actions/build
|
||||||
|
with:
|
||||||
|
generator: Ninja
|
||||||
|
configuration: ${{ matrix.configuration }}
|
||||||
|
cmake-args: "-Dassert=TRUE -Dwerr=TRUE ${{ matrix.cmake-args }}"
|
||||||
|
- name: test
|
||||||
|
run: |
|
||||||
|
${build_dir}/rippled --unittest --unittest-jobs $(nproc)
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
platform:
|
||||||
|
- linux
|
||||||
|
compiler:
|
||||||
|
- gcc
|
||||||
|
configuration:
|
||||||
|
- Debug
|
||||||
|
needs: dependencies
|
||||||
|
runs-on: [self-hosted, heavy]
|
||||||
|
container: ghcr.io/xrplf/rippled-build-ubuntu:aaf5e3e
|
||||||
|
env:
|
||||||
|
build_dir: .build
|
||||||
|
steps:
|
||||||
|
- name: upgrade conan
|
||||||
|
run: |
|
||||||
|
pip install --upgrade "conan<2"
|
||||||
|
- name: download cache
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.platform }}-${{ matrix.compiler }}-${{ matrix.configuration }}
|
||||||
|
- name: extract cache
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.conan
|
||||||
|
tar -xzf conan.tar -C ~/.conan
|
||||||
|
- name: install gcovr
|
||||||
|
run: pip install "gcovr>=7,<9"
|
||||||
|
- name: check environment
|
||||||
|
run: |
|
||||||
|
echo ${PATH} | tr ':' '\n'
|
||||||
|
conan --version
|
||||||
|
cmake --version
|
||||||
|
gcovr --version
|
||||||
|
env | sort
|
||||||
|
ls ~/.conan
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: dependencies
|
||||||
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
with:
|
||||||
|
configuration: ${{ matrix.configuration }}
|
||||||
|
- name: build
|
||||||
|
uses: ./.github/actions/build
|
||||||
|
with:
|
||||||
|
generator: Ninja
|
||||||
|
configuration: ${{ matrix.configuration }}
|
||||||
|
cmake-args: >-
|
||||||
|
-Dassert=TRUE
|
||||||
|
-Dwerr=TRUE
|
||||||
|
-Dcoverage=ON
|
||||||
|
-Dcoverage_format=xml
|
||||||
|
-DCODE_COVERAGE_VERBOSE=ON
|
||||||
|
-DCMAKE_CXX_FLAGS="-O0"
|
||||||
|
-DCMAKE_C_FLAGS="-O0"
|
||||||
|
cmake-target: coverage
|
||||||
|
- name: move coverage report
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mv "${build_dir}/coverage.xml" ./
|
||||||
|
- name: archive coverage report
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: coverage.xml
|
||||||
|
path: coverage.xml
|
||||||
|
retention-days: 30
|
||||||
|
- name: upload coverage report
|
||||||
|
uses: wandalen/wretry.action@v1.4.10
|
||||||
|
with:
|
||||||
|
action: codecov/codecov-action@v4.5.0
|
||||||
|
with: |
|
||||||
|
files: coverage.xml
|
||||||
|
fail_ci_if_error: true
|
||||||
|
disable_search: true
|
||||||
|
verbose: true
|
||||||
|
plugin: noop
|
||||||
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
attempt_limit: 5
|
||||||
|
attempt_delay: 210000 # in milliseconds
|
||||||
|
|
||||||
|
conan:
|
||||||
|
needs: dependencies
|
||||||
|
runs-on: [self-hosted, heavy]
|
||||||
|
container: ghcr.io/xrplf/rippled-build-ubuntu:aaf5e3e
|
||||||
|
env:
|
||||||
|
build_dir: .build
|
||||||
|
configuration: Release
|
||||||
|
steps:
|
||||||
|
- name: upgrade conan
|
||||||
|
run: |
|
||||||
|
pip install --upgrade "conan<2"
|
||||||
|
- name: download cache
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: linux-gcc-${{ env.configuration }}
|
||||||
|
- name: extract cache
|
||||||
|
run: |
|
||||||
|
mkdir -p ~/.conan
|
||||||
|
tar -xzf conan.tar -C ~/.conan
|
||||||
|
- name: check environment
|
||||||
|
run: |
|
||||||
|
env | sort
|
||||||
|
echo ${PATH} | tr ':' '\n'
|
||||||
|
conan --version
|
||||||
|
cmake --version
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: dependencies
|
||||||
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
with:
|
||||||
|
configuration: ${{ env.configuration }}
|
||||||
|
- name: export
|
||||||
|
run: |
|
||||||
|
version=$(conan inspect --raw version .)
|
||||||
|
reference="xrpl/${version}@local/test"
|
||||||
|
conan remove -f ${reference} || true
|
||||||
|
conan export . local/test
|
||||||
|
echo "reference=${reference}" >> "${GITHUB_ENV}"
|
||||||
|
- name: build
|
||||||
|
run: |
|
||||||
|
cd tests/conan
|
||||||
|
mkdir ${build_dir}
|
||||||
|
cd ${build_dir}
|
||||||
|
conan install .. --output-folder . \
|
||||||
|
--require-override ${reference} --build missing
|
||||||
|
cmake .. \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=./build/${configuration}/generators/conan_toolchain.cmake \
|
||||||
|
-DCMAKE_BUILD_TYPE=${configuration}
|
||||||
|
cmake --build .
|
||||||
|
./example | grep '^[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+'
|
||||||
|
|
||||||
|
# NOTE we are not using dependencies built above because it lags with
|
||||||
|
# compiler versions. Instrumentation requires clang version 16 or
|
||||||
|
# later
|
||||||
|
|
||||||
|
instrumentation-build:
|
||||||
|
if: ${{ github.event_name == 'push' || github.event.pull_request.draft != true || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') }}
|
||||||
|
env:
|
||||||
|
CLANG_RELEASE: 16
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
runs-on: [self-hosted, heavy]
|
||||||
|
container: debian:bookworm
|
||||||
|
steps:
|
||||||
|
- name: install prerequisites
|
||||||
|
env:
|
||||||
|
DEBIAN_FRONTEND: noninteractive
|
||||||
|
run: |
|
||||||
|
apt-get update
|
||||||
|
apt-get install --yes --no-install-recommends \
|
||||||
|
clang-${CLANG_RELEASE} clang++-${CLANG_RELEASE} \
|
||||||
|
python3-pip python-is-python3 make cmake git wget
|
||||||
|
apt-get clean
|
||||||
|
update-alternatives --install \
|
||||||
|
/usr/bin/clang clang /usr/bin/clang-${CLANG_RELEASE} 100 \
|
||||||
|
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${CLANG_RELEASE}
|
||||||
|
update-alternatives --auto clang
|
||||||
|
pip install --no-cache --break-system-packages "conan<2"
|
||||||
|
|
||||||
|
- name: checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: prepare environment
|
||||||
|
run: |
|
||||||
|
mkdir ${GITHUB_WORKSPACE}/.build
|
||||||
|
echo "SOURCE_DIR=$GITHUB_WORKSPACE" >> $GITHUB_ENV
|
||||||
|
echo "BUILD_DIR=$GITHUB_WORKSPACE/.build" >> $GITHUB_ENV
|
||||||
|
echo "CC=/usr/bin/clang" >> $GITHUB_ENV
|
||||||
|
echo "CXX=/usr/bin/clang++" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: configure Conan
|
||||||
|
run: |
|
||||||
|
conan profile new --detect default
|
||||||
|
conan profile update settings.compiler=clang default
|
||||||
|
conan profile update settings.compiler.version=${CLANG_RELEASE} default
|
||||||
|
conan profile update settings.compiler.libcxx=libstdc++11 default
|
||||||
|
conan profile update settings.compiler.cppstd=20 default
|
||||||
|
conan profile update options.rocksdb=False default
|
||||||
|
conan profile update \
|
||||||
|
'conf.tools.build:compiler_executables={"c": "/usr/bin/clang", "cpp": "/usr/bin/clang++"}' default
|
||||||
|
conan profile update 'env.CXXFLAGS="-DBOOST_ASIO_DISABLE_CONCEPTS"' default
|
||||||
|
conan profile update 'conf.tools.build:cxxflags+=["-DBOOST_ASIO_DISABLE_CONCEPTS"]' default
|
||||||
|
conan export external/snappy snappy/1.1.10@
|
||||||
|
conan export external/soci soci/4.0.3@
|
||||||
|
|
||||||
|
- name: build dependencies
|
||||||
|
run: |
|
||||||
|
cd ${BUILD_DIR}
|
||||||
|
conan install ${SOURCE_DIR} \
|
||||||
|
--output-folder ${BUILD_DIR} \
|
||||||
|
--install-folder ${BUILD_DIR} \
|
||||||
|
--build missing \
|
||||||
|
--settings build_type=Debug
|
||||||
|
|
||||||
|
- name: build with instrumentation
|
||||||
|
run: |
|
||||||
|
cd ${BUILD_DIR}
|
||||||
|
cmake -S ${SOURCE_DIR} -B ${BUILD_DIR} \
|
||||||
|
-Dvoidstar=ON \
|
||||||
|
-Dtests=ON \
|
||||||
|
-Dxrpld=ON \
|
||||||
|
-DCMAKE_BUILD_TYPE=Debug \
|
||||||
|
-DSECP256K1_BUILD_BENCHMARK=OFF \
|
||||||
|
-DSECP256K1_BUILD_TESTS=OFF \
|
||||||
|
-DSECP256K1_BUILD_EXHAUSTIVE_TESTS=OFF \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=${BUILD_DIR}/build/generators/conan_toolchain.cmake
|
||||||
|
cmake --build . --parallel $(nproc)
|
||||||
|
|
||||||
|
- name: verify instrumentation enabled
|
||||||
|
run: |
|
||||||
|
cd ${BUILD_DIR}
|
||||||
|
./rippled --version | grep libvoidstar
|
||||||
|
|
||||||
|
- name: run unit tests
|
||||||
|
run: |
|
||||||
|
cd ${BUILD_DIR}
|
||||||
|
./rippled -u --unittest-jobs $(( $(nproc)/4 ))
|
||||||
|
|||||||
93
.github/workflows/windows.yml
vendored
93
.github/workflows/windows.yml
vendored
@@ -1,6 +1,18 @@
|
|||||||
name: windows
|
name: windows
|
||||||
|
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, reopened, synchronize, ready_for_review]
|
||||||
|
push:
|
||||||
|
# If the branches list is ever changed, be sure to change it on all
|
||||||
|
# build/test jobs (nix, macos, windows, instrumentation)
|
||||||
|
branches:
|
||||||
|
# Always build the package branches
|
||||||
|
- develop
|
||||||
|
- release
|
||||||
|
- master
|
||||||
|
# Branches that opt-in to running
|
||||||
|
- 'ci/**'
|
||||||
|
|
||||||
# https://docs.github.com/en/actions/using-jobs/using-concurrency
|
# https://docs.github.com/en/actions/using-jobs/using-concurrency
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -10,26 +22,29 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
if: ${{ github.event_name == 'push' || github.event.pull_request.draft != true || contains(github.event.pull_request.labels.*.name, 'DraftRunCI') }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
generator:
|
version:
|
||||||
- Visual Studio 16 2019
|
- generator: Visual Studio 17 2022
|
||||||
|
runs-on: windows-2022
|
||||||
configuration:
|
configuration:
|
||||||
- Release
|
- type: Release
|
||||||
# Github hosted runners tend to hang when running Debug unit tests.
|
tests: true
|
||||||
# Instead of trying to work around it, disable the Debug job until
|
- type: Debug
|
||||||
# something beefier (i.e. a heavy self-hosted runner) becomes
|
# Skip running unit tests on debug builds, because they
|
||||||
# available.
|
# take an unreasonable amount of time
|
||||||
# - Debug
|
tests: false
|
||||||
runs-on: windows-2019
|
runtime: d
|
||||||
|
runs-on: ${{ matrix.version.runs-on }}
|
||||||
env:
|
env:
|
||||||
build_dir: .build
|
build_dir: .build
|
||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
- name: choose Python
|
- name: choose Python
|
||||||
uses: actions/setup-python@v3
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: 3.9
|
python-version: 3.9
|
||||||
- name: learn Python cache directory
|
- name: learn Python cache directory
|
||||||
@@ -39,7 +54,7 @@ jobs:
|
|||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
echo "dir=$(pip cache dir)" | tee ${GITHUB_OUTPUT}
|
echo "dir=$(pip cache dir)" | tee ${GITHUB_OUTPUT}
|
||||||
- name: restore Python cache directory
|
- name: restore Python cache directory
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ${{ steps.pip-cache.outputs.dir }}
|
path: ${{ steps.pip-cache.outputs.dir }}
|
||||||
key: ${{ runner.os }}-${{ hashFiles('.github/workflows/windows.yml') }}
|
key: ${{ runner.os }}-${{ hashFiles('.github/workflows/windows.yml') }}
|
||||||
@@ -47,54 +62,38 @@ jobs:
|
|||||||
run: pip install wheel 'conan<2'
|
run: pip install wheel 'conan<2'
|
||||||
- name: check environment
|
- name: check environment
|
||||||
run: |
|
run: |
|
||||||
|
dir env:
|
||||||
$env:PATH -split ';'
|
$env:PATH -split ';'
|
||||||
python --version
|
python --version
|
||||||
conan --version
|
conan --version
|
||||||
cmake --version
|
cmake --version
|
||||||
dir env:
|
|
||||||
- name: configure Conan
|
- name: configure Conan
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
|
||||||
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
|
||||||
run: |
|
run: |
|
||||||
conan profile new default --detect
|
conan profile new default --detect
|
||||||
conan profile update settings.compiler.runtime=MT${{ matrix.configuration == 'Debug' && 'd' || '' }} default
|
conan profile update settings.compiler.cppstd=20 default
|
||||||
# Do not quote the URL. An empty string will be accepted (with
|
conan profile update \
|
||||||
# a non-fatal warning), but a missing argument will not.
|
settings.compiler.runtime=MT${{ matrix.configuration.runtime }} \
|
||||||
conan remote add ripple ${{ env.CONAN_URL }} --insert 0
|
default
|
||||||
- name: try to authenticate to ripple Conan remote
|
|
||||||
shell: bash
|
|
||||||
id: remote
|
|
||||||
run: |
|
|
||||||
echo outcome=$(conan user --remote ripple ${{ secrets.CONAN_USERNAME }} \
|
|
||||||
--password ${{ secrets.CONAN_TOKEN }} >&2 && echo success || \
|
|
||||||
echo failure) | tee ${GITHUB_OUTPUT}
|
|
||||||
- name: list missing binaries
|
|
||||||
id: binaries
|
|
||||||
shell: bash
|
|
||||||
# Print the list of dependencies that would need to be built locally.
|
|
||||||
# A non-empty list means we have "failed" to cache binaries remotely.
|
|
||||||
run: |
|
|
||||||
echo missing=$(conan info . --build missing --settings build_type=${{ matrix.configuration }} --json 2>/dev/null | grep '^\[') | tee ${GITHUB_OUTPUT}
|
|
||||||
- name: build dependencies
|
- name: build dependencies
|
||||||
uses: ./.github/actions/dependencies
|
uses: ./.github/actions/dependencies
|
||||||
|
env:
|
||||||
|
CONAN_URL: http://18.143.149.228:8081/artifactory/api/conan/conan-non-prod
|
||||||
|
CONAN_LOGIN_USERNAME_RIPPLE: ${{ secrets.CONAN_USERNAME }}
|
||||||
|
CONAN_PASSWORD_RIPPLE: ${{ secrets.CONAN_TOKEN }}
|
||||||
with:
|
with:
|
||||||
configuration: ${{ matrix.configuration }}
|
configuration: ${{ matrix.configuration.type }}
|
||||||
- name: upload dependencies to remote
|
|
||||||
if: (steps.binaries.outputs.missing != '[]') && (steps.remote.outputs.outcome == 'success')
|
|
||||||
run: conan upload --remote ripple '*' --all --parallel --confirm
|
|
||||||
- name: build
|
- name: build
|
||||||
uses: ./.github/actions/build
|
uses: ./.github/actions/build
|
||||||
with:
|
with:
|
||||||
generator: '${{ matrix.generator }}'
|
generator: '${{ matrix.version.generator }}'
|
||||||
configuration: ${{ matrix.configuration }}
|
configuration: ${{ matrix.configuration.type }}
|
||||||
# Hard code for now. Move to the matrix if varied options are needed
|
# Hard code for now. Move to the matrix if varied options are needed
|
||||||
cmake-args: '-Dassert=ON -Dreporting=OFF -Dunity=ON'
|
cmake-args: '-Dassert=TRUE -Dwerr=TRUE -Dreporting=OFF -Dunity=ON'
|
||||||
- name: test (permitted to silently fail)
|
cmake-target: install
|
||||||
|
- name: test
|
||||||
shell: bash
|
shell: bash
|
||||||
# Github runners are resource limited, which causes unit tests to fail
|
if: ${{ matrix.configuration.tests }}
|
||||||
# (e.g. OOM). To allow forward progress until self-hosted runners are
|
|
||||||
# up and running reliably, allow the job to succeed even if tests fail.
|
|
||||||
continue-on-error: true
|
|
||||||
run: |
|
run: |
|
||||||
${build_dir}/${{ matrix.configuration }}/rippled --unittest --unittest-jobs $(nproc)
|
${build_dir}/${{ matrix.configuration.type }}/rippled --unittest \
|
||||||
|
--unittest-jobs $(nproc)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# .pre-commit-config.yaml
|
# .pre-commit-config.yaml
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||||
rev: v10.0.1
|
rev: v18.1.3
|
||||||
hooks:
|
hooks:
|
||||||
- id: clang-format
|
- id: clang-format
|
||||||
|
|||||||
193
API-CHANGELOG.md
193
API-CHANGELOG.md
@@ -8,42 +8,138 @@ The API version controls the API behavior you see. This includes what properties
|
|||||||
|
|
||||||
For a log of breaking changes, see the **API Version [number]** headings. In general, breaking changes are associated with a particular API Version number. For non-breaking changes, scroll to the **XRP Ledger version [x.y.z]** headings. Non-breaking changes are associated with a particular XRP Ledger (`rippled`) release.
|
For a log of breaking changes, see the **API Version [number]** headings. In general, breaking changes are associated with a particular API Version number. For non-breaking changes, scroll to the **XRP Ledger version [x.y.z]** headings. Non-breaking changes are associated with a particular XRP Ledger (`rippled`) release.
|
||||||
|
|
||||||
|
## API Version 2
|
||||||
|
|
||||||
|
API version 2 is available in `rippled` version 2.0.0 and later. To use this API, clients specify `"api_version" : 2` in each request.
|
||||||
|
|
||||||
|
#### Removed methods
|
||||||
|
|
||||||
|
In API version 2, the following deprecated methods are no longer available: (https://github.com/XRPLF/rippled/pull/4759)
|
||||||
|
|
||||||
|
- `tx_history` - Instead, use other methods such as `account_tx` or `ledger` with the `transactions` field set to `true`.
|
||||||
|
- `ledger_header` - Instead, use the `ledger` method.
|
||||||
|
|
||||||
|
#### Modifications to JSON transaction element in V2
|
||||||
|
|
||||||
|
In API version 2, JSON elements for transaction output have been changed and made consistent for all methods which output transactions. (https://github.com/XRPLF/rippled/pull/4775)
|
||||||
|
This helps to unify the JSON serialization format of transactions. (https://github.com/XRPLF/clio/issues/722, https://github.com/XRPLF/rippled/issues/4727)
|
||||||
|
|
||||||
|
- JSON transaction element is named `tx_json`
|
||||||
|
- Binary transaction element is named `tx_blob`
|
||||||
|
- JSON transaction metadata element is named `meta`
|
||||||
|
- Binary transaction metadata element is named `meta_blob`
|
||||||
|
|
||||||
|
Additionally, these elements are now consistently available next to `tx_json` (i.e. sibling elements), where possible:
|
||||||
|
|
||||||
|
- `hash` - Transaction ID. This data was stored inside transaction output in API version 1, but in API version 2 is a sibling element.
|
||||||
|
- `ledger_index` - Ledger index (only set on validated ledgers)
|
||||||
|
- `ledger_hash` - Ledger hash (only set on closed or validated ledgers)
|
||||||
|
- `close_time_iso` - Ledger close time expressed in ISO 8601 time format (only set on validated ledgers)
|
||||||
|
- `validated` - Bool element set to `true` if the transaction is in a validated ledger, otherwise `false`
|
||||||
|
|
||||||
|
This change affects the following methods:
|
||||||
|
|
||||||
|
- `tx` - Transaction data moved into element `tx_json` (was inline inside `result`) or, if binary output was requested, moved from `tx` to `tx_blob`. Renamed binary transaction metadata element (if it was requested) from `meta` to `meta_blob`. Changed location of `hash` and added new elements
|
||||||
|
- `account_tx` - Renamed transaction element from `tx` to `tx_json`. Renamed binary transaction metadata element (if it was requested) from `meta` to `meta_blob`. Changed location of `hash` and added new elements
|
||||||
|
- `transaction_entry` - Renamed transaction metadata element from `metadata` to `meta`. Changed location of `hash` and added new elements
|
||||||
|
- `subscribe` - Renamed transaction element from `transaction` to `tx_json`. Changed location of `hash` and added new elements
|
||||||
|
- `sign`, `sign_for`, `submit` and `submit_multisigned` - Changed location of `hash` element.
|
||||||
|
|
||||||
|
#### Modification to `Payment` transaction JSON schema
|
||||||
|
|
||||||
|
When reading Payments, the `Amount` field should generally **not** be used. Instead, use [delivered_amount](https://xrpl.org/partial-payments.html#the-delivered_amount-field) to see the amount that the Payment delivered. To clarify its meaning, the `Amount` field is being renamed to `DeliverMax`. (https://github.com/XRPLF/rippled/pull/4733)
|
||||||
|
|
||||||
|
- In `Payment` transaction type, JSON RPC field `Amount` is renamed to `DeliverMax`. To enable smooth client transition, `Amount` is still handled, as described below: (https://github.com/XRPLF/rippled/pull/4733)
|
||||||
|
- On JSON RPC input (e.g. `submit_multisigned` etc. methods), `Amount` is recognized as an alias to `DeliverMax` for both API version 1 and version 2 clients.
|
||||||
|
- On JSON RPC input, submitting both `Amount` and `DeliverMax` fields is allowed _only_ if they are identical; otherwise such input is rejected with `rpcINVALID_PARAMS` error.
|
||||||
|
- On JSON RPC output (e.g. `subscribe`, `account_tx` etc. methods), `DeliverMax` is present in both API version 1 and version 2.
|
||||||
|
- On JSON RPC output, `Amount` is only present in API version 1 and _not_ in version 2.
|
||||||
|
|
||||||
|
#### Modifications to account_info response
|
||||||
|
|
||||||
|
- `signer_lists` is returned in the root of the response. (In API version 1, it was nested under `account_data`.) (https://github.com/XRPLF/rippled/pull/3770)
|
||||||
|
- When using an invalid `signer_lists` value, the API now returns an "invalidParams" error. (https://github.com/XRPLF/rippled/pull/4585)
|
||||||
|
- (`signer_lists` must be a boolean. In API version 1, strings were accepted and may return a normal response - i.e. as if `signer_lists` were `true`.)
|
||||||
|
|
||||||
|
#### Modifications to [account_tx](https://xrpl.org/account_tx.html#account_tx) response
|
||||||
|
|
||||||
|
- Using `ledger_index_min`, `ledger_index_max`, and `ledger_index` returns `invalidParams` because if you use `ledger_index_min` or `ledger_index_max`, then it does not make sense to also specify `ledger_index`. In API version 1, no error was returned. (https://github.com/XRPLF/rippled/pull/4571)
|
||||||
|
- The same applies for `ledger_index_min`, `ledger_index_max`, and `ledger_hash`. (https://github.com/XRPLF/rippled/issues/4545#issuecomment-1565065579)
|
||||||
|
- Using a `ledger_index_min` or `ledger_index_max` beyond the range of ledgers that the server has:
|
||||||
|
- returns `lgrIdxMalformed` in API version 2. Previously, in API version 1, no error was returned. (https://github.com/XRPLF/rippled/issues/4288)
|
||||||
|
- Attempting to use a non-boolean value (such as a string) for the `binary` or `forward` parameters returns `invalidParams` (`rpcINVALID_PARAMS`). Previously, in API version 1, no error was returned. (https://github.com/XRPLF/rippled/pull/4620)
|
||||||
|
|
||||||
|
#### Modifications to [noripple_check](https://xrpl.org/noripple_check.html#noripple_check) response
|
||||||
|
|
||||||
|
- Attempting to use a non-boolean value (such as a string) for the `transactions` parameter returns `invalidParams` (`rpcINVALID_PARAMS`). Previously, in API version 1, no error was returned. (https://github.com/XRPLF/rippled/pull/4620)
|
||||||
|
|
||||||
## API Version 1
|
## API Version 1
|
||||||
|
|
||||||
This version is supported by all `rippled` versions. At time of writing, it is the default API version, used when no `api_version` is specified. When a new API version is introduced, the command line interface will default to the latest API version. The command line is intended for ad-hoc usage by humans, not programs or automated scripts. The command line is not meant for use in production code.
|
This version is supported by all `rippled` versions. For WebSocket and HTTP JSON-RPC requests, it is currently the default API version used when no `api_version` is specified.
|
||||||
|
|
||||||
### Idiosyncrasies
|
The [commandline](https://xrpl.org/docs/references/http-websocket-apis/api-conventions/request-formatting/#commandline-format) always uses the latest API version. The command line is intended for ad-hoc usage by humans, not programs or automated scripts. The command line is not meant for use in production code.
|
||||||
|
|
||||||
#### V1 account_info response
|
### Inconsistency: server_info - network_id
|
||||||
|
|
||||||
In [the response to the `account_info` command](https://xrpl.org/account_info.html#response-format), there is `account_data` - which is supposed to be an `AccountRoot` object - and `signer_lists` is returned in this object. However, the docs say that `signer_lists` should be at the root level of the reponse.
|
The `network_id` field was added in the `server_info` response in version 1.5.0 (2019), but it is not returned in [reporting mode](https://xrpl.org/rippled-server-modes.html#reporting-mode). However, use of reporting mode is now discouraged, in favor of using [Clio](https://github.com/XRPLF/clio) instead.
|
||||||
|
|
||||||
It makes sense for `signer_lists` to be at the root level because signer lists are not part of the AccountRoot object. (First reported in [xrpl-dev-portal#938](https://github.com/XRPLF/xrpl-dev-portal/issues/938).)
|
## XRP Ledger server version 2.5.0
|
||||||
|
|
||||||
In `api_version: 2`, the `signer_lists` field [will be moved](#modifications-to-account_info-response-in-v2) to the root level of the account_info response. (https://github.com/XRPLF/rippled/pull/3770)
|
As of 2025-04-04, version 2.5.0 is in development. You can use a pre-release version by building from source or [using the `nightly` package](https://xrpl.org/docs/infrastructure/installation/install-rippled-on-ubuntu).
|
||||||
|
|
||||||
#### server_info - network_id
|
### Additions and bugfixes in 2.5.0
|
||||||
|
|
||||||
The `network_id` field was added in the `server_info` response in version 1.5.0 (2019), but it is not returned in [reporting mode](https://xrpl.org/rippled-server-modes.html#reporting-mode).
|
- `channel_authorize`: If `signing_support` is not enabled in the config, the RPC is disabled.
|
||||||
|
|
||||||
|
## XRP Ledger server version 2.4.0
|
||||||
|
|
||||||
|
[Version 2.4.0](https://github.com/XRPLF/rippled/releases/tag/2.4.0) was released on March 4, 2025.
|
||||||
|
|
||||||
|
### Additions and bugfixes in 2.4.0
|
||||||
|
|
||||||
|
- `ledger_entry`: `state` is added an alias for `ripple_state`.
|
||||||
|
- `ledger_entry`: Enables case-insensitive filtering by canonical name in addition to case-sensitive filtering by RPC name.
|
||||||
|
- `validators`: Added new field `validator_list_threshold` in response.
|
||||||
|
- `simulate`: A new RPC that executes a [dry run of a transaction submission](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0069d-simulate#2-rpc-simulate)
|
||||||
|
- Signing methods autofill fees better and properly handle transactions that don't have a base fee, and will also autofill the `NetworkID` field.
|
||||||
|
|
||||||
|
## XRP Ledger server version 2.3.0
|
||||||
|
|
||||||
|
[Version 2.3.0](https://github.com/XRPLF/rippled/releases/tag/2.3.0) was released on Nov 25, 2024.
|
||||||
|
|
||||||
|
### Breaking changes in 2.3.0
|
||||||
|
|
||||||
|
- `book_changes`: If the requested ledger version is not available on this node, a `ledgerNotFound` error is returned and the node does not attempt to acquire the ledger from the p2p network (as with other non-admin RPCs).
|
||||||
|
|
||||||
|
Admins can still attempt to retrieve old ledgers with the `ledger_request` RPC.
|
||||||
|
|
||||||
|
### Additions and bugfixes in 2.3.0
|
||||||
|
|
||||||
|
- `book_changes`: Returns a `validated` field in its response, which was missing in prior versions.
|
||||||
|
|
||||||
|
## XRP Ledger server version 2.2.0
|
||||||
|
|
||||||
|
[Version 2.2.0](https://github.com/XRPLF/rippled/releases/tag/2.2.0) was released on Jun 5, 2024. The following additions are non-breaking (because they are purely additive):
|
||||||
|
|
||||||
|
- The `feature` method now has a non-admin mode for users. (It was previously only available to admin connections.) The method returns an updated list of amendments, including their names and other information. ([#4781](https://github.com/XRPLF/rippled/pull/4781))
|
||||||
|
|
||||||
## XRP Ledger server version 2.0.0
|
## XRP Ledger server version 2.0.0
|
||||||
|
|
||||||
### Additions in 2.0
|
[Version 2.0.0](https://github.com/XRPLF/rippled/releases/tag/2.0.0) was released on Jan 9, 2024. The following additions are non-breaking (because they are purely additive):
|
||||||
|
|
||||||
Additions are intended to be non-breaking (because they are purely additive).
|
|
||||||
|
|
||||||
- `server_definitions`: A new RPC that generates a `definitions.json`-like output that can be used in XRPL libraries.
|
- `server_definitions`: A new RPC that generates a `definitions.json`-like output that can be used in XRPL libraries.
|
||||||
- In `Payment` transactions, `DeliverMax` has been added. This is a replacement for the `Amount` field, which should not be used. Typically, the `delivered_amount` (in transaction metadata) should be used. To ease the transition, `DeliverMax` is present regardless of API version, since adding a field is non-breaking.
|
- In `Payment` transactions, `DeliverMax` has been added. This is a replacement for the `Amount` field, which should not be used. Typically, the `delivered_amount` (in transaction metadata) should be used. To ease the transition, `DeliverMax` is present regardless of API version, since adding a field is non-breaking.
|
||||||
- API version 2 has been moved from beta to supported, meaning that it is generally available (regardless of the `beta_rpc_api` setting).
|
- API version 2 has been moved from beta to supported, meaning that it is generally available (regardless of the `beta_rpc_api` setting).
|
||||||
|
|
||||||
|
## XRP Ledger server version 2.2.0
|
||||||
|
|
||||||
|
The following is a non-breaking addition to the API.
|
||||||
|
|
||||||
|
- The `feature` method now has a non-admin mode for users. (It was previously only available to admin connections.) The method returns an updated list of amendments, including their names and other information. ([#4781](https://github.com/XRPLF/rippled/pull/4781))
|
||||||
|
|
||||||
## XRP Ledger server version 1.12.0
|
## XRP Ledger server version 1.12.0
|
||||||
|
|
||||||
[Version 1.12.0](https://github.com/XRPLF/rippled/releases/tag/1.12.0) was released on Sep 6, 2023.
|
[Version 1.12.0](https://github.com/XRPLF/rippled/releases/tag/1.12.0) was released on Sep 6, 2023. The following additions are non-breaking (because they are purely additive).
|
||||||
|
|
||||||
### Additions in 1.12
|
|
||||||
|
|
||||||
Additions are intended to be non-breaking (because they are purely additive).
|
|
||||||
|
|
||||||
- `server_info`: Added `ports`, an array which advertises the RPC and WebSocket ports. This information is also included in the `/crawl` endpoint (which calls `server_info` internally). `grpc` and `peer` ports are also included. (https://github.com/XRPLF/rippled/pull/4427)
|
- `server_info`: Added `ports`, an array which advertises the RPC and WebSocket ports. This information is also included in the `/crawl` endpoint (which calls `server_info` internally). `grpc` and `peer` ports are also included. (https://github.com/XRPLF/rippled/pull/4427)
|
||||||
- `ports` contains objects, each containing a `port` for the listening port (a number string), and a `protocol` array listing the supported protocols on that port.
|
- `ports` contains objects, each containing a `port` for the listening port (a number string), and a `protocol` array listing the supported protocols on that port.
|
||||||
@@ -120,71 +216,6 @@ was released on Mar 14, 2023.
|
|||||||
removed from the [ledger subscription stream](https://xrpl.org/subscribe.html#ledger-stream), because it will no longer
|
removed from the [ledger subscription stream](https://xrpl.org/subscribe.html#ledger-stream), because it will no longer
|
||||||
have any meaning.
|
have any meaning.
|
||||||
|
|
||||||
## API Version 2
|
|
||||||
|
|
||||||
API version 2 is introduced in `rippled` version 2.0. Users can request it explicitly by specifying `"api_version" : 2`.
|
|
||||||
|
|
||||||
#### Removed methods
|
|
||||||
|
|
||||||
In API version 2, the following deprecated methods are no longer available: (https://github.com/XRPLF/rippled/pull/4759)
|
|
||||||
|
|
||||||
- `tx_history` - Instead, use other methods such as `account_tx` or `ledger` with the `transactions` field set to `true`.
|
|
||||||
- `ledger_header` - Instead, use the `ledger` method.
|
|
||||||
|
|
||||||
#### Modifications to JSON transaction element in V2
|
|
||||||
|
|
||||||
In API version 2, JSON elements for transaction output have been changed and made consistent for all methods which output transactions. (https://github.com/XRPLF/rippled/pull/4775)
|
|
||||||
This helps to unify the JSON serialization format of transactions. (https://github.com/XRPLF/clio/issues/722, https://github.com/XRPLF/rippled/issues/4727)
|
|
||||||
|
|
||||||
- JSON transaction element is named `tx_json`
|
|
||||||
- Binary transaction element is named `tx_blob`
|
|
||||||
- JSON transaction metadata element is named `meta`
|
|
||||||
- Binary transaction metadata element is named `meta_blob`
|
|
||||||
|
|
||||||
Additionally, these elements are now consistently available next to `tx_json` (i.e. sibling elements), where possible:
|
|
||||||
|
|
||||||
- `hash` - Transaction ID. This data was stored inside transaction output in API version 1, but in API version 2 is a sibling element.
|
|
||||||
- `ledger_index` - Ledger index (only set on validated ledgers)
|
|
||||||
- `ledger_hash` - Ledger hash (only set on closed or validated ledgers)
|
|
||||||
- `close_time_iso` - Ledger close time expressed in ISO 8601 time format (only set on validated ledgers)
|
|
||||||
- `validated` - Bool element set to `true` if the transaction is in a validated ledger, otherwise `false`
|
|
||||||
|
|
||||||
This change affects the following methods:
|
|
||||||
|
|
||||||
- `tx` - Transaction data moved into element `tx_json` (was inline inside `result`) or, if binary output was requested, moved from `tx` to `tx_blob`. Renamed binary transaction metadata element (if it was requested) from `meta` to `meta_blob`. Changed location of `hash` and added new elements
|
|
||||||
- `account_tx` - Renamed transaction element from `tx` to `tx_json`. Renamed binary transaction metadata element (if it was requested) from `meta` to `meta_blob`. Changed location of `hash` and added new elements
|
|
||||||
- `transaction_entry` - Renamed transaction metadata element from `metadata` to `meta`. Changed location of `hash` and added new elements
|
|
||||||
- `subscribe` - Renamed transaction element from `transaction` to `tx_json`. Changed location of `hash` and added new elements
|
|
||||||
- `sign`, `sign_for`, `submit` and `submit_multisigned` - Changed location of `hash` element.
|
|
||||||
|
|
||||||
#### Modification to `Payment` transaction JSON schema
|
|
||||||
|
|
||||||
When reading Payments, the `Amount` field should generally **not** be used. Instead, use [delivered_amount](https://xrpl.org/partial-payments.html#the-delivered_amount-field) to see the amount that the Payment delivered. To clarify its meaning, the `Amount` field is being renamed to `DeliverMax`. (https://github.com/XRPLF/rippled/pull/4733)
|
|
||||||
|
|
||||||
- In `Payment` transaction type, JSON RPC field `Amount` is renamed to `DeliverMax`. To enable smooth client transition, `Amount` is still handled, as described below: (https://github.com/XRPLF/rippled/pull/4733)
|
|
||||||
- On JSON RPC input (e.g. `submit_multisigned` etc. methods), `Amount` is recognized as an alias to `DeliverMax` for both API version 1 and version 2 clients.
|
|
||||||
- On JSON RPC input, submitting both `Amount` and `DeliverMax` fields is allowed _only_ if they are identical; otherwise such input is rejected with `rpcINVALID_PARAMS` error.
|
|
||||||
- On JSON RPC output (e.g. `subscribe`, `account_tx` etc. methods), `DeliverMax` is present in both API version 1 and version 2.
|
|
||||||
- On JSON RPC output, `Amount` is only present in API version 1 and _not_ in version 2.
|
|
||||||
|
|
||||||
#### Modifications to account_info response
|
|
||||||
|
|
||||||
- `signer_lists` is returned in the root of the response. In API version 1, it was nested under `account_data`. (https://github.com/XRPLF/rippled/pull/3770)
|
|
||||||
- When using an invalid `signer_lists` value, the API now returns an "invalidParams" error. (https://github.com/XRPLF/rippled/pull/4585)
|
|
||||||
- (`signer_lists` must be a boolean. In API version 1, strings were accepted and may return a normal response - i.e. as if `signer_lists` were `true`.)
|
|
||||||
|
|
||||||
#### Modifications to [account_tx](https://xrpl.org/account_tx.html#account_tx) response
|
|
||||||
|
|
||||||
- Using `ledger_index_min`, `ledger_index_max`, and `ledger_index` returns `invalidParams` because if you use `ledger_index_min` or `ledger_index_max`, then it does not make sense to also specify `ledger_index`. In API version 1, no error was returned. (https://github.com/XRPLF/rippled/pull/4571)
|
|
||||||
- The same applies for `ledger_index_min`, `ledger_index_max`, and `ledger_hash`. (https://github.com/XRPLF/rippled/issues/4545#issuecomment-1565065579)
|
|
||||||
- Using a `ledger_index_min` or `ledger_index_max` beyond the range of ledgers that the server has:
|
|
||||||
- returns `lgrIdxMalformed` in API version 2. Previously, in API version 1, no error was returned. (https://github.com/XRPLF/rippled/issues/4288)
|
|
||||||
- Attempting to use a non-boolean value (such as a string) for the `binary` or `forward` parameters returns `invalidParams` (`rpcINVALID_PARAMS`). Previously, in API version 1, no error was returned. (https://github.com/XRPLF/rippled/pull/4620)
|
|
||||||
|
|
||||||
#### Modifications to [noripple_check](https://xrpl.org/noripple_check.html#noripple_check) response
|
|
||||||
|
|
||||||
- Attempting to use a non-boolean value (such as a string) for the `transactions` parameter returns `invalidParams` (`rpcINVALID_PARAMS`). Previously, in API version 1, no error was returned. (https://github.com/XRPLF/rippled/pull/4620)
|
|
||||||
|
|
||||||
# Unit tests for API changes
|
# Unit tests for API changes
|
||||||
|
|
||||||
The following information is useful to developers contributing to this project:
|
The following information is useful to developers contributing to this project:
|
||||||
|
|||||||
173
BUILD.md
173
BUILD.md
@@ -36,9 +36,15 @@ See [System Requirements](https://xrpl.org/system-requirements.html).
|
|||||||
Building rippled generally requires git, Python, Conan, CMake, and a C++ compiler. Some guidance on setting up such a [C++ development environment can be found here](./docs/build/environment.md).
|
Building rippled generally requires git, Python, Conan, CMake, and a C++ compiler. Some guidance on setting up such a [C++ development environment can be found here](./docs/build/environment.md).
|
||||||
|
|
||||||
- [Python 3.7](https://www.python.org/downloads/)
|
- [Python 3.7](https://www.python.org/downloads/)
|
||||||
- [Conan 1.55](https://conan.io/downloads.html)
|
- [Conan 1.60](https://conan.io/downloads.html)[^1]
|
||||||
- [CMake 3.16](https://cmake.org/download/)
|
- [CMake 3.16](https://cmake.org/download/)
|
||||||
|
|
||||||
|
[^1]: It is possible to build with Conan 2.x,
|
||||||
|
but the instructions are significantly different,
|
||||||
|
which is why we are not recommending it yet.
|
||||||
|
Notably, the `conan profile update` command is removed in 2.x.
|
||||||
|
Profiles must be edited by hand.
|
||||||
|
|
||||||
`rippled` is written in the C++20 dialect and includes the `<concepts>` header.
|
`rippled` is written in the C++20 dialect and includes the `<concepts>` header.
|
||||||
The [minimum compiler versions][2] required are:
|
The [minimum compiler versions][2] required are:
|
||||||
|
|
||||||
@@ -67,9 +73,6 @@ Here are [sample instructions for setting up a C++ development environment on ma
|
|||||||
Windows is not recommended for production use at this time.
|
Windows is not recommended for production use at this time.
|
||||||
|
|
||||||
- Additionally, 32-bit Windows development is not supported.
|
- Additionally, 32-bit Windows development is not supported.
|
||||||
- Visual Studio 2022 is not yet supported.
|
|
||||||
- rippled generally requires [Boost][] 1.77, which Conan cannot build with VS 2022.
|
|
||||||
- Until rippled is updated for compatibility with later versions of Boost, Windows developers may need to use Visual Studio 2019.
|
|
||||||
|
|
||||||
[Boost]: https://www.boost.org/
|
[Boost]: https://www.boost.org/
|
||||||
|
|
||||||
@@ -95,6 +98,12 @@ Update the compiler settings:
|
|||||||
conan profile update settings.compiler.cppstd=20 default
|
conan profile update settings.compiler.cppstd=20 default
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Configure Conan (1.x only) to use recipe revisions:
|
||||||
|
|
||||||
|
```
|
||||||
|
conan config set general.revisions_enabled=1
|
||||||
|
```
|
||||||
|
|
||||||
**Linux** developers will commonly have a default Conan [profile][] that compiles
|
**Linux** developers will commonly have a default Conan [profile][] that compiles
|
||||||
with GCC and links with libstdc++.
|
with GCC and links with libstdc++.
|
||||||
If you are linking with libstdc++ (see profile setting `compiler.libcxx`),
|
If you are linking with libstdc++ (see profile setting `compiler.libcxx`),
|
||||||
@@ -104,6 +113,20 @@ then you will need to choose the `libstdc++11` ABI:
|
|||||||
conan profile update settings.compiler.libcxx=libstdc++11 default
|
conan profile update settings.compiler.libcxx=libstdc++11 default
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Ensure inter-operability between `boost::string_view` and `std::string_view` types:
|
||||||
|
|
||||||
|
```
|
||||||
|
conan profile update 'conf.tools.build:cxxflags+=["-DBOOST_BEAST_USE_STD_STRING_VIEW"]' default
|
||||||
|
conan profile update 'env.CXXFLAGS="-DBOOST_BEAST_USE_STD_STRING_VIEW"' default
|
||||||
|
```
|
||||||
|
|
||||||
|
If you have other flags in the `conf.tools.build` or `env.CXXFLAGS` sections, make sure to retain the existing flags and append the new ones. You can check them with:
|
||||||
|
```
|
||||||
|
conan profile show default
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
**Windows** developers may need to use the x64 native build tools.
|
**Windows** developers may need to use the x64 native build tools.
|
||||||
An easy way to do that is to run the shortcut "x64 Native Tools Command
|
An easy way to do that is to run the shortcut "x64 Native Tools Command
|
||||||
Prompt" for the version of Visual Studio that you have installed.
|
Prompt" for the version of Visual Studio that you have installed.
|
||||||
@@ -144,14 +167,41 @@ It does not explicitly link the C++ standard library,
|
|||||||
which allows you to statically link it with GCC, if you want.
|
which allows you to statically link it with GCC, if you want.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
# Conan 1.x
|
||||||
conan export external/snappy snappy/1.1.10@
|
conan export external/snappy snappy/1.1.10@
|
||||||
|
# Conan 2.x
|
||||||
|
conan export --version 1.1.10 external/snappy
|
||||||
|
```
|
||||||
|
|
||||||
|
Export our [Conan recipe for RocksDB](./external/rocksdb).
|
||||||
|
It does not override paths to dependencies when building with Visual Studio.
|
||||||
|
|
||||||
|
```
|
||||||
|
# Conan 1.x
|
||||||
|
conan export external/rocksdb rocksdb/9.7.3@
|
||||||
|
# Conan 2.x
|
||||||
|
conan export --version 9.7.3 external/rocksdb
|
||||||
```
|
```
|
||||||
|
|
||||||
Export our [Conan recipe for SOCI](./external/soci).
|
Export our [Conan recipe for SOCI](./external/soci).
|
||||||
It patches their CMake to correctly import its dependencies.
|
It patches their CMake to correctly import its dependencies.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
# Conan 1.x
|
||||||
conan export external/soci soci/4.0.3@
|
conan export external/soci soci/4.0.3@
|
||||||
|
# Conan 2.x
|
||||||
|
conan export --version 4.0.3 external/soci
|
||||||
|
```
|
||||||
|
|
||||||
|
Export our [Conan recipe for NuDB](./external/nudb).
|
||||||
|
It fixes some source files to add missing `#include`s.
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
# Conan 1.x
|
||||||
|
conan export external/nudb nudb/2.0.8@
|
||||||
|
# Conan 2.x
|
||||||
|
conan export --version 2.0.8 external/nudb
|
||||||
```
|
```
|
||||||
|
|
||||||
### Build and Test
|
### Build and Test
|
||||||
@@ -172,13 +222,15 @@ It patches their CMake to correctly import its dependencies.
|
|||||||
the `install-folder` or `-if` option to every `conan install` command
|
the `install-folder` or `-if` option to every `conan install` command
|
||||||
in the next step.
|
in the next step.
|
||||||
|
|
||||||
2. Generate CMake files for every configuration you want to build.
|
2. Use conan to generate CMake files for every configuration you want to build:
|
||||||
|
|
||||||
```
|
```
|
||||||
conan install .. --output-folder . --build missing --settings build_type=Release
|
conan install .. --output-folder . --build missing --settings build_type=Release
|
||||||
conan install .. --output-folder . --build missing --settings build_type=Debug
|
conan install .. --output-folder . --build missing --settings build_type=Debug
|
||||||
```
|
```
|
||||||
|
|
||||||
|
To build Debug, in the next step, be sure to set `-DCMAKE_BUILD_TYPE=Debug`
|
||||||
|
|
||||||
For a single-configuration generator, e.g. `Unix Makefiles` or `Ninja`,
|
For a single-configuration generator, e.g. `Unix Makefiles` or `Ninja`,
|
||||||
you only need to run this command once.
|
you only need to run this command once.
|
||||||
For a multi-configuration generator, e.g. `Visual Studio`, you may want to
|
For a multi-configuration generator, e.g. `Visual Studio`, you may want to
|
||||||
@@ -208,23 +260,26 @@ It patches their CMake to correctly import its dependencies.
|
|||||||
|
|
||||||
Single-config generators:
|
Single-config generators:
|
||||||
|
|
||||||
|
Pass the CMake variable [`CMAKE_BUILD_TYPE`][build_type]
|
||||||
|
and make sure it matches the one of the `build_type` settings
|
||||||
|
you chose in the previous step.
|
||||||
|
|
||||||
|
For example, to build Debug, in the next command, replace "Release" with "Debug"
|
||||||
|
|
||||||
```
|
```
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release ..
|
cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release -Dxrpld=ON -Dtests=ON ..
|
||||||
```
|
```
|
||||||
|
|
||||||
Pass the CMake variable [`CMAKE_BUILD_TYPE`][build_type]
|
|
||||||
and make sure it matches the `build_type` setting you chose in the previous
|
|
||||||
step.
|
|
||||||
|
|
||||||
Multi-config generators:
|
Multi-config generators:
|
||||||
|
|
||||||
```
|
```
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake ..
|
cmake -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake -Dxrpld=ON -Dtests=ON ..
|
||||||
```
|
```
|
||||||
|
|
||||||
**Note:** You can pass build options for `rippled` in this step.
|
**Note:** You can pass build options for `rippled` in this step.
|
||||||
|
|
||||||
4. Build `rippled`.
|
5. Build `rippled`.
|
||||||
|
|
||||||
For a single-configuration generator, it will build whatever configuration
|
For a single-configuration generator, it will build whatever configuration
|
||||||
you passed for `CMAKE_BUILD_TYPE`. For a multi-configuration generator,
|
you passed for `CMAKE_BUILD_TYPE`. For a multi-configuration generator,
|
||||||
@@ -233,7 +288,7 @@ It patches their CMake to correctly import its dependencies.
|
|||||||
Single-config generators:
|
Single-config generators:
|
||||||
|
|
||||||
```
|
```
|
||||||
cmake --build .
|
cmake --build . -j $(nproc)
|
||||||
```
|
```
|
||||||
|
|
||||||
Multi-config generators:
|
Multi-config generators:
|
||||||
@@ -243,7 +298,7 @@ It patches their CMake to correctly import its dependencies.
|
|||||||
cmake --build . --config Debug
|
cmake --build . --config Debug
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Test rippled.
|
6. Test rippled.
|
||||||
|
|
||||||
Single-config generators:
|
Single-config generators:
|
||||||
|
|
||||||
@@ -262,15 +317,75 @@ It patches their CMake to correctly import its dependencies.
|
|||||||
generator. Pass `--help` to see the rest of the command line options.
|
generator. Pass `--help` to see the rest of the command line options.
|
||||||
|
|
||||||
|
|
||||||
|
## Coverage report
|
||||||
|
|
||||||
|
The coverage report is intended for developers using compilers GCC
|
||||||
|
or Clang (including Apple Clang). It is generated by the build target `coverage`,
|
||||||
|
which is only enabled when the `coverage` option is set, e.g. with
|
||||||
|
`--options coverage=True` in `conan` or `-Dcoverage=ON` variable in `cmake`
|
||||||
|
|
||||||
|
Prerequisites for the coverage report:
|
||||||
|
|
||||||
|
- [gcovr tool][gcovr] (can be installed e.g. with [pip][python-pip])
|
||||||
|
- `gcov` for GCC (installed with the compiler by default) or
|
||||||
|
- `llvm-cov` for Clang (installed with the compiler by default)
|
||||||
|
- `Debug` build type
|
||||||
|
|
||||||
|
A coverage report is created when the following steps are completed, in order:
|
||||||
|
|
||||||
|
1. `rippled` binary built with instrumentation data, enabled by the `coverage`
|
||||||
|
option mentioned above
|
||||||
|
2. completed run of unit tests, which populates coverage capture data
|
||||||
|
3. completed run of the `gcovr` tool (which internally invokes either `gcov` or `llvm-cov`)
|
||||||
|
to assemble both instrumentation data and the coverage capture data into a coverage report
|
||||||
|
|
||||||
|
The above steps are automated into a single target `coverage`. The instrumented
|
||||||
|
`rippled` binary can also be used for regular development or testing work, at
|
||||||
|
the cost of extra disk space utilization and a small performance hit
|
||||||
|
(to store coverage capture). In case of a spurious failure of unit tests, it is
|
||||||
|
possible to re-run the `coverage` target without rebuilding the `rippled` binary
|
||||||
|
(since it is simply a dependency of the coverage report target). It is also possible
|
||||||
|
to select only specific tests for the purpose of the coverage report, by setting
|
||||||
|
the `coverage_test` variable in `cmake`
|
||||||
|
|
||||||
|
The default coverage report format is `html-details`, but the user
|
||||||
|
can override it to any of the formats listed in `Builds/CMake/CodeCoverage.cmake`
|
||||||
|
by setting the `coverage_format` variable in `cmake`. It is also possible
|
||||||
|
to generate more than one format at a time by setting the `coverage_extra_args`
|
||||||
|
variable in `cmake`. The specific command line used to run the `gcovr` tool will be
|
||||||
|
displayed if the `CODE_COVERAGE_VERBOSE` variable is set.
|
||||||
|
|
||||||
|
By default, the code coverage tool runs parallel unit tests with `--unittest-jobs`
|
||||||
|
set to the number of available CPU cores. This may cause spurious test
|
||||||
|
errors on Apple. Developers can override the number of unit test jobs with
|
||||||
|
the `coverage_test_parallelism` variable in `cmake`.
|
||||||
|
|
||||||
|
Example use with some cmake variables set:
|
||||||
|
|
||||||
|
```
|
||||||
|
cd .build
|
||||||
|
conan install .. --output-folder . --build missing --settings build_type=Debug
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Debug -Dcoverage=ON -Dxrpld=ON -Dtests=ON -Dcoverage_test_parallelism=2 -Dcoverage_format=html-details -Dcoverage_extra_args="--json coverage.json" -DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake ..
|
||||||
|
cmake --build . --target coverage
|
||||||
|
```
|
||||||
|
|
||||||
|
After the `coverage` target is completed, the generated coverage report will be
|
||||||
|
stored inside the build directory, as either of:
|
||||||
|
|
||||||
|
- file named `coverage.`_extension_ , with a suitable extension for the report format, or
|
||||||
|
- directory named `coverage`, with the `index.html` and other files inside, for the `html-details` or `html-nested` report formats.
|
||||||
|
|
||||||
|
|
||||||
## Options
|
## Options
|
||||||
|
|
||||||
| Option | Default Value | Description |
|
| Option | Default Value | Description |
|
||||||
| --- | ---| ---|
|
| --- | ---| ---|
|
||||||
| `assert` | OFF | Enable assertions.
|
| `assert` | OFF | Enable assertions.
|
||||||
| `reporting` | OFF | Build the reporting mode feature. |
|
| `coverage` | OFF | Prepare the coverage report. |
|
||||||
| `tests` | ON | Build tests. |
|
|
||||||
| `unity` | ON | Configure a unity build. |
|
|
||||||
| `san` | N/A | Enable a sanitizer with Clang. Choices are `thread` and `address`. |
|
| `san` | N/A | Enable a sanitizer with Clang. Choices are `thread` and `address`. |
|
||||||
|
| `tests` | OFF | Build tests. |
|
||||||
|
| `unity` | ON | Configure a unity build. |
|
||||||
|
| `xrpld` | OFF | Build the xrpld (`rippled`) application, and not just the libxrpl library. |
|
||||||
|
|
||||||
[Unity builds][5] may be faster for the first build
|
[Unity builds][5] may be faster for the first build
|
||||||
(at the cost of much more memory) since they concatenate sources into fewer
|
(at the cost of much more memory) since they concatenate sources into fewer
|
||||||
@@ -293,6 +408,23 @@ After any updates or changes to dependencies, you may need to do the following:
|
|||||||
4. Re-run [conan install](#build-and-test).
|
4. Re-run [conan install](#build-and-test).
|
||||||
|
|
||||||
|
|
||||||
|
### 'protobuf/port_def.inc' file not found
|
||||||
|
|
||||||
|
If `cmake --build .` results in an error due to a missing a protobuf file, then you might have generated CMake files for a different `build_type` than the `CMAKE_BUILD_TYPE` you passed to conan.
|
||||||
|
|
||||||
|
```
|
||||||
|
/rippled/.build/pb-xrpl.libpb/xrpl/proto/ripple.pb.h:10:10: fatal error: 'google/protobuf/port_def.inc' file not found
|
||||||
|
10 | #include <google/protobuf/port_def.inc>
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
1 error generated.
|
||||||
|
```
|
||||||
|
|
||||||
|
For example, if you want to build Debug:
|
||||||
|
|
||||||
|
1. For conan install, pass `--settings build_type=Debug`
|
||||||
|
2. For cmake, pass `-DCMAKE_BUILD_TYPE=Debug`
|
||||||
|
|
||||||
|
|
||||||
### no std::result_of
|
### no std::result_of
|
||||||
|
|
||||||
If your compiler version is recent enough to have removed `std::result_of` as
|
If your compiler version is recent enough to have removed `std::result_of` as
|
||||||
@@ -362,12 +494,7 @@ If you want to experiment with a new package, follow these steps:
|
|||||||
[5]: https://en.wikipedia.org/wiki/Unity_build
|
[5]: https://en.wikipedia.org/wiki/Unity_build
|
||||||
[6]: https://github.com/boostorg/beast/issues/2648
|
[6]: https://github.com/boostorg/beast/issues/2648
|
||||||
[7]: https://github.com/boostorg/beast/issues/2661
|
[7]: https://github.com/boostorg/beast/issues/2661
|
||||||
|
[gcovr]: https://gcovr.com/en/stable/getting-started.html
|
||||||
|
[python-pip]: https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/
|
||||||
[build_type]: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
|
[build_type]: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
|
||||||
[runtime]: https://cmake.org/cmake/help/latest/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html
|
|
||||||
[toolchain]: https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
|
|
||||||
[pcf]: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#package-configuration-file
|
|
||||||
[pvf]: https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#package-version-file
|
|
||||||
[find_package]: https://cmake.org/cmake/help/latest/command/find_package.html
|
|
||||||
[search]: https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure
|
|
||||||
[prefix_path]: https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html
|
|
||||||
[profile]: https://docs.conan.io/en/latest/reference/profiles.html
|
[profile]: https://docs.conan.io/en/latest/reference/profiles.html
|
||||||
|
|||||||
@@ -1,207 +0,0 @@
|
|||||||
|
|
||||||
macro(group_sources_in source_dir curdir)
|
|
||||||
file(GLOB children RELATIVE ${source_dir}/${curdir}
|
|
||||||
${source_dir}/${curdir}/*)
|
|
||||||
foreach (child ${children})
|
|
||||||
if (IS_DIRECTORY ${source_dir}/${curdir}/${child})
|
|
||||||
group_sources_in(${source_dir} ${curdir}/${child})
|
|
||||||
else()
|
|
||||||
string(REPLACE "/" "\\" groupname ${curdir})
|
|
||||||
source_group(${groupname} FILES
|
|
||||||
${source_dir}/${curdir}/${child})
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
macro(group_sources curdir)
|
|
||||||
group_sources_in(${PROJECT_SOURCE_DIR} ${curdir})
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
macro (exclude_from_default target_)
|
|
||||||
set_target_properties (${target_} PROPERTIES EXCLUDE_FROM_ALL ON)
|
|
||||||
set_target_properties (${target_} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD ON)
|
|
||||||
endmacro ()
|
|
||||||
|
|
||||||
macro (exclude_if_included target_)
|
|
||||||
get_directory_property(has_parent PARENT_DIRECTORY)
|
|
||||||
if (has_parent)
|
|
||||||
exclude_from_default (${target_})
|
|
||||||
endif ()
|
|
||||||
endmacro ()
|
|
||||||
|
|
||||||
function (print_ep_logs _target)
|
|
||||||
ExternalProject_Get_Property (${_target} STAMP_DIR)
|
|
||||||
add_custom_command(TARGET ${_target} POST_BUILD
|
|
||||||
COMMENT "${_target} BUILD OUTPUT"
|
|
||||||
COMMAND ${CMAKE_COMMAND}
|
|
||||||
-DIN_FILE=${STAMP_DIR}/${_target}-build-out.log
|
|
||||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/echo_file.cmake
|
|
||||||
COMMAND ${CMAKE_COMMAND}
|
|
||||||
-DIN_FILE=${STAMP_DIR}/${_target}-build-err.log
|
|
||||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake/echo_file.cmake)
|
|
||||||
endfunction ()
|
|
||||||
|
|
||||||
#[=========================================================[
|
|
||||||
This is a function override for one function in the
|
|
||||||
standard ExternalProject module. We want to change
|
|
||||||
the generated build script slightly to include printing
|
|
||||||
the build logs in the case of failure. Those modifications
|
|
||||||
have been made here. This function override could break
|
|
||||||
in the future if the ExternalProject module changes internal
|
|
||||||
function names or changes the way it generates the build
|
|
||||||
scripts.
|
|
||||||
See:
|
|
||||||
https://gitlab.kitware.com/cmake/cmake/blob/df1ddeec128d68cc636f2dde6c2acd87af5658b6/Modules/ExternalProject.cmake#L1855-1952
|
|
||||||
#]=========================================================]
|
|
||||||
|
|
||||||
function(_ep_write_log_script name step cmd_var)
|
|
||||||
ExternalProject_Get_Property(${name} stamp_dir)
|
|
||||||
set(command "${${cmd_var}}")
|
|
||||||
|
|
||||||
set(make "")
|
|
||||||
set(code_cygpath_make "")
|
|
||||||
if(command MATCHES "^\\$\\(MAKE\\)")
|
|
||||||
# GNU make recognizes the string "$(MAKE)" as recursive make, so
|
|
||||||
# ensure that it appears directly in the makefile.
|
|
||||||
string(REGEX REPLACE "^\\$\\(MAKE\\)" "\${make}" command "${command}")
|
|
||||||
set(make "-Dmake=$(MAKE)")
|
|
||||||
|
|
||||||
if(WIN32 AND NOT CYGWIN)
|
|
||||||
set(code_cygpath_make "
|
|
||||||
if(\${make} MATCHES \"^/\")
|
|
||||||
execute_process(
|
|
||||||
COMMAND cygpath -w \${make}
|
|
||||||
OUTPUT_VARIABLE cygpath_make
|
|
||||||
ERROR_VARIABLE cygpath_make
|
|
||||||
RESULT_VARIABLE cygpath_error
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
if(NOT cygpath_error)
|
|
||||||
set(make \${cygpath_make})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(config "")
|
|
||||||
if("${CMAKE_CFG_INTDIR}" MATCHES "^\\$")
|
|
||||||
string(REPLACE "${CMAKE_CFG_INTDIR}" "\${config}" command "${command}")
|
|
||||||
set(config "-Dconfig=${CMAKE_CFG_INTDIR}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Wrap multiple 'COMMAND' lines up into a second-level wrapper
|
|
||||||
# script so all output can be sent to one log file.
|
|
||||||
if(command MATCHES "(^|;)COMMAND;")
|
|
||||||
set(code_execute_process "
|
|
||||||
${code_cygpath_make}
|
|
||||||
execute_process(COMMAND \${command} RESULT_VARIABLE result)
|
|
||||||
if(result)
|
|
||||||
set(msg \"Command failed (\${result}):\\n\")
|
|
||||||
foreach(arg IN LISTS command)
|
|
||||||
set(msg \"\${msg} '\${arg}'\")
|
|
||||||
endforeach()
|
|
||||||
message(FATAL_ERROR \"\${msg}\")
|
|
||||||
endif()
|
|
||||||
")
|
|
||||||
set(code "")
|
|
||||||
set(cmd "")
|
|
||||||
set(sep "")
|
|
||||||
foreach(arg IN LISTS command)
|
|
||||||
if("x${arg}" STREQUAL "xCOMMAND")
|
|
||||||
if(NOT "x${cmd}" STREQUAL "x")
|
|
||||||
string(APPEND code "set(command \"${cmd}\")${code_execute_process}")
|
|
||||||
endif()
|
|
||||||
set(cmd "")
|
|
||||||
set(sep "")
|
|
||||||
else()
|
|
||||||
string(APPEND cmd "${sep}${arg}")
|
|
||||||
set(sep ";")
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
string(APPEND code "set(command \"${cmd}\")${code_execute_process}")
|
|
||||||
file(GENERATE OUTPUT "${stamp_dir}/${name}-${step}-$<CONFIG>-impl.cmake" CONTENT "${code}")
|
|
||||||
set(command ${CMAKE_COMMAND} "-Dmake=\${make}" "-Dconfig=\${config}" -P ${stamp_dir}/${name}-${step}-$<CONFIG>-impl.cmake)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Wrap the command in a script to log output to files.
|
|
||||||
set(script ${stamp_dir}/${name}-${step}-$<CONFIG>.cmake)
|
|
||||||
set(logbase ${stamp_dir}/${name}-${step})
|
|
||||||
set(code "
|
|
||||||
${code_cygpath_make}
|
|
||||||
function (_echo_file _fil)
|
|
||||||
file (READ \${_fil} _cont)
|
|
||||||
execute_process (COMMAND \${CMAKE_COMMAND} -E echo \"\${_cont}\")
|
|
||||||
endfunction ()
|
|
||||||
set(command \"${command}\")
|
|
||||||
execute_process(
|
|
||||||
COMMAND \${command}
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
OUTPUT_FILE \"${logbase}-out.log\"
|
|
||||||
ERROR_FILE \"${logbase}-err.log\"
|
|
||||||
)
|
|
||||||
if(result)
|
|
||||||
set(msg \"Command failed: \${result}\\n\")
|
|
||||||
foreach(arg IN LISTS command)
|
|
||||||
set(msg \"\${msg} '\${arg}'\")
|
|
||||||
endforeach()
|
|
||||||
execute_process (COMMAND \${CMAKE_COMMAND} -E echo \"Build output for ${logbase} : \")
|
|
||||||
_echo_file (\"${logbase}-out.log\")
|
|
||||||
_echo_file (\"${logbase}-err.log\")
|
|
||||||
set(msg \"\${msg}\\nSee above\\n\")
|
|
||||||
message(FATAL_ERROR \"\${msg}\")
|
|
||||||
else()
|
|
||||||
set(msg \"${name} ${step} command succeeded. See also ${logbase}-*.log\")
|
|
||||||
message(STATUS \"\${msg}\")
|
|
||||||
endif()
|
|
||||||
")
|
|
||||||
file(GENERATE OUTPUT "${script}" CONTENT "${code}")
|
|
||||||
set(command ${CMAKE_COMMAND} ${make} ${config} -P ${script})
|
|
||||||
set(${cmd_var} "${command}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
find_package(Git)
|
|
||||||
|
|
||||||
# function that calls git log to get current hash
|
|
||||||
function (git_hash hash_val)
|
|
||||||
# note: optional second extra string argument not in signature
|
|
||||||
if (NOT GIT_FOUND)
|
|
||||||
return ()
|
|
||||||
endif ()
|
|
||||||
set (_hash "")
|
|
||||||
set (_format "%H")
|
|
||||||
if (ARGC GREATER_EQUAL 2)
|
|
||||||
string (TOLOWER ${ARGV1} _short)
|
|
||||||
if (_short STREQUAL "short")
|
|
||||||
set (_format "%h")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
execute_process (COMMAND ${GIT_EXECUTABLE} "log" "--pretty=${_format}" "-n1"
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
RESULT_VARIABLE _git_exit_code
|
|
||||||
OUTPUT_VARIABLE _temp_hash
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
ERROR_QUIET)
|
|
||||||
if (_git_exit_code EQUAL 0)
|
|
||||||
set (_hash ${_temp_hash})
|
|
||||||
endif ()
|
|
||||||
set (${hash_val} "${_hash}" PARENT_SCOPE)
|
|
||||||
endfunction ()
|
|
||||||
|
|
||||||
function (git_branch branch_val)
|
|
||||||
if (NOT GIT_FOUND)
|
|
||||||
return ()
|
|
||||||
endif ()
|
|
||||||
set (_branch "")
|
|
||||||
execute_process (COMMAND ${GIT_EXECUTABLE} "rev-parse" "--abbrev-ref" "HEAD"
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
RESULT_VARIABLE _git_exit_code
|
|
||||||
OUTPUT_VARIABLE _temp_branch
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
ERROR_QUIET)
|
|
||||||
if (_git_exit_code EQUAL 0)
|
|
||||||
set (_branch ${_temp_branch})
|
|
||||||
endif ()
|
|
||||||
set (${branch_val} "${_branch}" PARENT_SCOPE)
|
|
||||||
endfunction ()
|
|
||||||
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
|
|
||||||
#[=========================================================[
|
|
||||||
SQLITE doesn't provide build files in the
|
|
||||||
standard source-only distribution. So we wrote
|
|
||||||
a simple cmake file and we copy it to the
|
|
||||||
external project folder so that we can use
|
|
||||||
this file to build the lib with ExternalProject
|
|
||||||
#]=========================================================]
|
|
||||||
|
|
||||||
add_library (sqlite3 STATIC sqlite3.c)
|
|
||||||
#[=========================================================[
|
|
||||||
When compiled with SQLITE_THREADSAFE=1, SQLite operates
|
|
||||||
in serialized mode. In this mode, SQLite can be safely
|
|
||||||
used by multiple threads with no restriction.
|
|
||||||
|
|
||||||
NOTE: This implies a global mutex!
|
|
||||||
|
|
||||||
When compiled with SQLITE_THREADSAFE=2, SQLite can be
|
|
||||||
used in a multithreaded program so long as no two
|
|
||||||
threads attempt to use the same database connection at
|
|
||||||
the same time.
|
|
||||||
|
|
||||||
NOTE: This is the preferred threading model, but not
|
|
||||||
currently enabled because we need to investigate our
|
|
||||||
use-model and concurrency requirements.
|
|
||||||
|
|
||||||
TODO: consider whether any other options should be
|
|
||||||
used: https://www.sqlite.org/compile.html
|
|
||||||
#]=========================================================]
|
|
||||||
|
|
||||||
target_compile_definitions (sqlite3
|
|
||||||
PRIVATE
|
|
||||||
SQLITE_THREADSAFE=1
|
|
||||||
HAVE_USLEEP=1)
|
|
||||||
target_compile_options (sqlite3
|
|
||||||
PRIVATE
|
|
||||||
$<$<BOOL:${MSVC}>:
|
|
||||||
-wd4100
|
|
||||||
-wd4127
|
|
||||||
-wd4232
|
|
||||||
-wd4244
|
|
||||||
-wd4701
|
|
||||||
-wd4706
|
|
||||||
-wd4996
|
|
||||||
>
|
|
||||||
$<$<NOT:$<BOOL:${MSVC}>>:-Wno-array-bounds>)
|
|
||||||
install (
|
|
||||||
TARGETS
|
|
||||||
sqlite3
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
RUNTIME DESTINATION bin
|
|
||||||
INCLUDES DESTINATION include)
|
|
||||||
install (
|
|
||||||
FILES
|
|
||||||
sqlite3.h
|
|
||||||
sqlite3ext.h
|
|
||||||
DESTINATION include)
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,98 +0,0 @@
|
|||||||
#[===================================================================[
|
|
||||||
coverage report target
|
|
||||||
#]===================================================================]
|
|
||||||
|
|
||||||
if (coverage)
|
|
||||||
if (is_clang)
|
|
||||||
if (APPLE)
|
|
||||||
execute_process (COMMAND xcrun -f llvm-profdata
|
|
||||||
OUTPUT_VARIABLE LLVM_PROFDATA
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
else ()
|
|
||||||
find_program (LLVM_PROFDATA llvm-profdata)
|
|
||||||
endif ()
|
|
||||||
if (NOT LLVM_PROFDATA)
|
|
||||||
message (WARNING "unable to find llvm-profdata - skipping coverage_report target")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
execute_process (COMMAND xcrun -f llvm-cov
|
|
||||||
OUTPUT_VARIABLE LLVM_COV
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
else ()
|
|
||||||
find_program (LLVM_COV llvm-cov)
|
|
||||||
endif ()
|
|
||||||
if (NOT LLVM_COV)
|
|
||||||
message (WARNING "unable to find llvm-cov - skipping coverage_report target")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set (extract_pattern "")
|
|
||||||
if (coverage_core_only)
|
|
||||||
set (extract_pattern "${CMAKE_CURRENT_SOURCE_DIR}/src/ripple/")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (LLVM_COV AND LLVM_PROFDATA)
|
|
||||||
add_custom_target (coverage_report
|
|
||||||
USES_TERMINAL
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "Generating coverage - results will be in ${CMAKE_BINARY_DIR}/coverage/index.html."
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "Running rippled tests."
|
|
||||||
COMMAND rippled --unittest$<$<BOOL:${coverage_test}>:=${coverage_test}> --quiet --unittest-log
|
|
||||||
COMMAND ${LLVM_PROFDATA}
|
|
||||||
merge -sparse default.profraw -o rip.profdata
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "Summary of coverage:"
|
|
||||||
COMMAND ${LLVM_COV}
|
|
||||||
report -instr-profile=rip.profdata
|
|
||||||
$<TARGET_FILE:rippled> ${extract_pattern}
|
|
||||||
# generate html report
|
|
||||||
COMMAND ${LLVM_COV}
|
|
||||||
show -format=html -output-dir=${CMAKE_BINARY_DIR}/coverage
|
|
||||||
-instr-profile=rip.profdata
|
|
||||||
$<TARGET_FILE:rippled> ${extract_pattern}
|
|
||||||
BYPRODUCTS coverage/index.html)
|
|
||||||
endif ()
|
|
||||||
elseif (is_gcc)
|
|
||||||
find_program (LCOV lcov)
|
|
||||||
if (NOT LCOV)
|
|
||||||
message (WARNING "unable to find lcov - skipping coverage_report target")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
find_program (GENHTML genhtml)
|
|
||||||
if (NOT GENHTML)
|
|
||||||
message (WARNING "unable to find genhtml - skipping coverage_report target")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set (extract_pattern "*")
|
|
||||||
if (coverage_core_only)
|
|
||||||
set (extract_pattern "*/src/ripple/*")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (LCOV AND GENHTML)
|
|
||||||
add_custom_target (coverage_report
|
|
||||||
USES_TERMINAL
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "Generating coverage- results will be in ${CMAKE_BINARY_DIR}/coverage/index.html."
|
|
||||||
# create baseline info file
|
|
||||||
COMMAND ${LCOV}
|
|
||||||
--no-external -d "${CMAKE_CURRENT_SOURCE_DIR}" -c -d . -i -o baseline.info
|
|
||||||
| grep -v "ignoring data for external file"
|
|
||||||
# run tests
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "Running rippled tests for coverage report."
|
|
||||||
COMMAND rippled --unittest$<$<BOOL:${coverage_test}>:=${coverage_test}> --quiet --unittest-log
|
|
||||||
# Create test coverage data file
|
|
||||||
COMMAND ${LCOV}
|
|
||||||
--no-external -d "${CMAKE_CURRENT_SOURCE_DIR}" -c -d . -o tests.info
|
|
||||||
| grep -v "ignoring data for external file"
|
|
||||||
# Combine baseline and test coverage data
|
|
||||||
COMMAND ${LCOV}
|
|
||||||
-a baseline.info -a tests.info -o lcov-all.info
|
|
||||||
# extract our files
|
|
||||||
COMMAND ${LCOV}
|
|
||||||
-e lcov-all.info "${extract_pattern}" -o lcov.info
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "Summary of coverage:"
|
|
||||||
COMMAND ${LCOV} --summary lcov.info
|
|
||||||
# generate HTML report
|
|
||||||
COMMAND ${GENHTML}
|
|
||||||
-o ${CMAKE_BINARY_DIR}/coverage lcov.info
|
|
||||||
BYPRODUCTS coverage/index.html)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
#[===================================================================[
|
|
||||||
multiconfig misc
|
|
||||||
#]===================================================================]
|
|
||||||
|
|
||||||
if (is_multiconfig)
|
|
||||||
# This code finds all source files in the src subdirectory for inclusion
|
|
||||||
# in the IDE file tree as non-compiled sources. Since this file list will
|
|
||||||
# have some overlap with files we have already added to our targets to
|
|
||||||
# be compiled, we explicitly remove any of these target source files from
|
|
||||||
# this list.
|
|
||||||
file (GLOB_RECURSE all_sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
CONFIGURE_DEPENDS
|
|
||||||
src/*.* Builds/*.md docs/*.md src/*.md Builds/*.cmake)
|
|
||||||
file(GLOB md_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS
|
|
||||||
*.md)
|
|
||||||
LIST(APPEND all_sources ${md_files})
|
|
||||||
foreach (_target secp256k1::secp256k1 ed25519::ed25519 xrpl_core rippled)
|
|
||||||
get_target_property (_type ${_target} TYPE)
|
|
||||||
if(_type STREQUAL "INTERFACE_LIBRARY")
|
|
||||||
continue()
|
|
||||||
endif()
|
|
||||||
get_target_property (_src ${_target} SOURCES)
|
|
||||||
list (REMOVE_ITEM all_sources ${_src})
|
|
||||||
endforeach ()
|
|
||||||
target_sources (rippled PRIVATE ${all_sources})
|
|
||||||
set_property (
|
|
||||||
SOURCE ${all_sources}
|
|
||||||
APPEND
|
|
||||||
PROPERTY HEADER_FILE_ONLY true)
|
|
||||||
if (MSVC)
|
|
||||||
set_property(
|
|
||||||
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
PROPERTY VS_STARTUP_PROJECT rippled)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
group_sources(src)
|
|
||||||
group_sources(docs)
|
|
||||||
group_sources(Builds)
|
|
||||||
endif ()
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
#[===================================================================[
|
|
||||||
package/container targets - (optional)
|
|
||||||
#]===================================================================]
|
|
||||||
|
|
||||||
if (is_root_project)
|
|
||||||
if (NOT DOCKER)
|
|
||||||
find_program (DOCKER docker)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (DOCKER)
|
|
||||||
# if no container label is provided, use current git hash
|
|
||||||
git_hash (commit_hash)
|
|
||||||
if (NOT container_label)
|
|
||||||
set (container_label ${commit_hash})
|
|
||||||
endif ()
|
|
||||||
message (STATUS "using [${container_label}] as build container tag...")
|
|
||||||
|
|
||||||
file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/packages)
|
|
||||||
|
|
||||||
#[===================================================================[
|
|
||||||
rpm
|
|
||||||
#]===================================================================]
|
|
||||||
add_custom_target (rpm_container
|
|
||||||
docker build
|
|
||||||
--pull
|
|
||||||
--build-arg GIT_COMMIT=${commit_hash}
|
|
||||||
-t rippleci/rippled-rpm-builder:${container_label}
|
|
||||||
$<$<BOOL:${rpm_cache_from}>:--cache-from=${rpm_cache_from}>
|
|
||||||
-f centos-builder/Dockerfile .
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers
|
|
||||||
VERBATIM
|
|
||||||
USES_TERMINAL
|
|
||||||
COMMAND_EXPAND_LISTS
|
|
||||||
SOURCES
|
|
||||||
Builds/containers/centos-builder/Dockerfile
|
|
||||||
Builds/containers/centos-builder/centos_setup.sh
|
|
||||||
Builds/containers/shared/update-rippled.sh
|
|
||||||
Builds/containers/shared/update_sources.sh
|
|
||||||
Builds/containers/shared/rippled.service
|
|
||||||
Builds/containers/shared/rippled-reporting.service
|
|
||||||
Builds/containers/packaging/rpm/rippled.spec
|
|
||||||
Builds/containers/packaging/rpm/build_rpm.sh
|
|
||||||
Builds/containers/packaging/rpm/50-rippled.preset
|
|
||||||
Builds/containers/packaging/rpm/50-rippled-reporting.preset
|
|
||||||
bin/getRippledInfo
|
|
||||||
)
|
|
||||||
exclude_from_default (rpm_container)
|
|
||||||
add_custom_target (rpm
|
|
||||||
docker run
|
|
||||||
-v ${CMAKE_CURRENT_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
|
|
||||||
-v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
|
|
||||||
-t rippled-rpm-builder:${container_label}
|
|
||||||
/bin/bash -c "cp -fpu rippled/Builds/containers/packaging/rpm/build_rpm.sh . && ./build_rpm.sh"
|
|
||||||
VERBATIM
|
|
||||||
USES_TERMINAL
|
|
||||||
COMMAND_EXPAND_LISTS
|
|
||||||
SOURCES
|
|
||||||
Builds/containers/packaging/rpm/rippled.spec
|
|
||||||
)
|
|
||||||
exclude_from_default (rpm)
|
|
||||||
if (NOT have_package_container)
|
|
||||||
add_dependencies(rpm rpm_container)
|
|
||||||
endif ()
|
|
||||||
#[===================================================================[
|
|
||||||
dpkg
|
|
||||||
#]===================================================================]
|
|
||||||
# currently use ubuntu 18.04 as a base b/c it has one of
|
|
||||||
# the lower versions of libc among ubuntu and debian releases.
|
|
||||||
# we could change this in the future and build with some other deb
|
|
||||||
# based system.
|
|
||||||
add_custom_target (dpkg_container
|
|
||||||
docker build
|
|
||||||
--pull
|
|
||||||
--build-arg DIST_TAG=18.04
|
|
||||||
--build-arg GIT_COMMIT=${commit_hash}
|
|
||||||
-t rippled-dpkg-builder:${container_label}
|
|
||||||
$<$<BOOL:${dpkg_cache_from}>:--cache-from=${dpkg_cache_from}>
|
|
||||||
-f ubuntu-builder/Dockerfile .
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers
|
|
||||||
VERBATIM
|
|
||||||
USES_TERMINAL
|
|
||||||
COMMAND_EXPAND_LISTS
|
|
||||||
SOURCES
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled-reporting.links
|
|
||||||
Builds/containers/packaging/dpkg/debian/copyright
|
|
||||||
Builds/containers/packaging/dpkg/debian/rules
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled-reporting.install
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled-reporting.postinst
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled.links
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled.prerm
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled.postinst
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled-dev.install
|
|
||||||
Builds/containers/packaging/dpkg/debian/dirs
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled.postrm
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled.conffiles
|
|
||||||
Builds/containers/packaging/dpkg/debian/compat
|
|
||||||
Builds/containers/packaging/dpkg/debian/source/format
|
|
||||||
Builds/containers/packaging/dpkg/debian/source/local-options
|
|
||||||
Builds/containers/packaging/dpkg/debian/README.Debian
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled.install
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled.preinst
|
|
||||||
Builds/containers/packaging/dpkg/debian/docs
|
|
||||||
Builds/containers/packaging/dpkg/debian/control
|
|
||||||
Builds/containers/packaging/dpkg/debian/rippled-reporting.dirs
|
|
||||||
Builds/containers/packaging/dpkg/build_dpkg.sh
|
|
||||||
Builds/containers/ubuntu-builder/Dockerfile
|
|
||||||
Builds/containers/ubuntu-builder/ubuntu_setup.sh
|
|
||||||
bin/getRippledInfo
|
|
||||||
Builds/containers/shared/install_cmake.sh
|
|
||||||
Builds/containers/shared/update-rippled.sh
|
|
||||||
Builds/containers/shared/update_sources.sh
|
|
||||||
Builds/containers/shared/rippled.service
|
|
||||||
Builds/containers/shared/rippled-reporting.service
|
|
||||||
Builds/containers/shared/rippled-logrotate
|
|
||||||
Builds/containers/shared/update-rippled-cron
|
|
||||||
)
|
|
||||||
exclude_from_default (dpkg_container)
|
|
||||||
add_custom_target (dpkg
|
|
||||||
docker run
|
|
||||||
-v ${CMAKE_CURRENT_SOURCE_DIR}:/opt/rippled_bld/pkg/rippled
|
|
||||||
-v ${CMAKE_CURRENT_BINARY_DIR}/packages:/opt/rippled_bld/pkg/out
|
|
||||||
-t rippled-dpkg-builder:${container_label}
|
|
||||||
/bin/bash -c "cp -fpu rippled/Builds/containers/packaging/dpkg/build_dpkg.sh . && ./build_dpkg.sh"
|
|
||||||
VERBATIM
|
|
||||||
USES_TERMINAL
|
|
||||||
COMMAND_EXPAND_LISTS
|
|
||||||
SOURCES
|
|
||||||
Builds/containers/packaging/dpkg/debian/control
|
|
||||||
)
|
|
||||||
exclude_from_default (dpkg)
|
|
||||||
if (NOT have_package_container)
|
|
||||||
add_dependencies(dpkg dpkg_container)
|
|
||||||
endif ()
|
|
||||||
#[===================================================================[
|
|
||||||
ci container
|
|
||||||
#]===================================================================]
|
|
||||||
# now use the same ubuntu image for our travis-ci docker images,
|
|
||||||
# but we use a newer distro (18.04 vs 16.04).
|
|
||||||
#
|
|
||||||
# the following steps assume the github pkg repo, but it's possible to
|
|
||||||
# adapt these for other docker hub repositories.
|
|
||||||
#
|
|
||||||
# steps for publishing a new CI image when you make changes:
|
|
||||||
#
|
|
||||||
# mkdir bld.ci && cd bld.ci && cmake -Dpackages_only=ON -Dcontainer_label=CI_LATEST
|
|
||||||
# cmake --build . --target ci_container --verbose
|
|
||||||
# docker tag rippled-ci-builder:CI_LATEST <HUB REPO PATH>/rippled-ci-builder:YYYY-MM-DD
|
|
||||||
# (NOTE: change YYYY-MM-DD to match current date, or use a different
|
|
||||||
# tag/version scheme if you prefer)
|
|
||||||
# docker push <HUB REPO PATH>/rippled-ci-builder:YYYY-MM-DD
|
|
||||||
# (NOTE: <HUB REPO PATH> is probably your user or org name if using
|
|
||||||
# docker hub, or it might be something like
|
|
||||||
# docker.pkg.github.com/ripple/rippled if using the github pkg
|
|
||||||
# registry. for any registry, you will need to be logged-in via
|
|
||||||
# docker and have push access.)
|
|
||||||
#
|
|
||||||
# ...then change the DOCKER_IMAGE line in .travis.yml :
|
|
||||||
# - DOCKER_IMAGE="<HUB REPO PATH>/rippled-ci-builder:YYYY-MM-DD"
|
|
||||||
add_custom_target (ci_container
|
|
||||||
docker build
|
|
||||||
--pull
|
|
||||||
--build-arg DIST_TAG=18.04
|
|
||||||
--build-arg GIT_COMMIT=${commit_hash}
|
|
||||||
--build-arg CI_USE=true
|
|
||||||
-t rippled-ci-builder:${container_label}
|
|
||||||
$<$<BOOL:${ci_cache_from}>:--cache-from=${ci_cache_from}>
|
|
||||||
-f ubuntu-builder/Dockerfile .
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Builds/containers
|
|
||||||
VERBATIM
|
|
||||||
USES_TERMINAL
|
|
||||||
COMMAND_EXPAND_LISTS
|
|
||||||
SOURCES
|
|
||||||
Builds/containers/ubuntu-builder/Dockerfile
|
|
||||||
Builds/containers/ubuntu-builder/ubuntu_setup.sh
|
|
||||||
)
|
|
||||||
exclude_from_default (ci_container)
|
|
||||||
else ()
|
|
||||||
message (STATUS "docker NOT found -- won't be able to build containers for packaging")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
#[===================================================================[
|
|
||||||
declare user options/settings
|
|
||||||
#]===================================================================]
|
|
||||||
|
|
||||||
option (assert "Enables asserts, even in release builds" OFF)
|
|
||||||
|
|
||||||
option (reporting "Build rippled with reporting mode enabled" OFF)
|
|
||||||
|
|
||||||
option (tests "Build tests" ON)
|
|
||||||
|
|
||||||
option (unity "Creates a build using UNITY support in cmake. This is the default" ON)
|
|
||||||
if (unity)
|
|
||||||
if (NOT is_ci)
|
|
||||||
set (CMAKE_UNITY_BUILD_BATCH_SIZE 15 CACHE STRING "")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
if (is_gcc OR is_clang)
|
|
||||||
option (coverage "Generates coverage info." OFF)
|
|
||||||
option (profile "Add profiling flags" OFF)
|
|
||||||
set (coverage_test "" CACHE STRING
|
|
||||||
"On gcc & clang, the specific unit test(s) to run for coverage. Default is all tests.")
|
|
||||||
if (coverage_test AND NOT coverage)
|
|
||||||
set (coverage ON CACHE BOOL "gcc/clang only" FORCE)
|
|
||||||
endif ()
|
|
||||||
option (coverage_core_only
|
|
||||||
"Include only src/ripple files when generating coverage report. \
|
|
||||||
Set to OFF to include all sources in coverage report."
|
|
||||||
ON)
|
|
||||||
option (wextra "compile with extra gcc/clang warnings enabled" ON)
|
|
||||||
else ()
|
|
||||||
set (profile OFF CACHE BOOL "gcc/clang only" FORCE)
|
|
||||||
set (coverage OFF CACHE BOOL "gcc/clang only" FORCE)
|
|
||||||
set (wextra OFF CACHE BOOL "gcc/clang only" FORCE)
|
|
||||||
endif ()
|
|
||||||
if (is_linux)
|
|
||||||
option (BUILD_SHARED_LIBS "build shared ripple libraries" OFF)
|
|
||||||
option (static "link protobuf, openssl, libc++, and boost statically" ON)
|
|
||||||
option (perf "Enables flags that assist with perf recording" OFF)
|
|
||||||
option (use_gold "enables detection of gold (binutils) linker" ON)
|
|
||||||
option (use_mold "enables detection of mold (binutils) linker" ON)
|
|
||||||
else ()
|
|
||||||
# we are not ready to allow shared-libs on windows because it would require
|
|
||||||
# export declarations. On macos it's more feasible, but static openssl
|
|
||||||
# produces odd linker errors, thus we disable shared lib builds for now.
|
|
||||||
set (BUILD_SHARED_LIBS OFF CACHE BOOL "build shared ripple libraries - OFF for win/macos" FORCE)
|
|
||||||
set (static ON CACHE BOOL "static link, linux only. ON for WIN/macos" FORCE)
|
|
||||||
set (perf OFF CACHE BOOL "perf flags, linux only" FORCE)
|
|
||||||
set (use_gold OFF CACHE BOOL "gold linker, linux only" FORCE)
|
|
||||||
set (use_mold OFF CACHE BOOL "mold linker, linux only" FORCE)
|
|
||||||
endif ()
|
|
||||||
if (is_clang)
|
|
||||||
option (use_lld "enables detection of lld linker" ON)
|
|
||||||
else ()
|
|
||||||
set (use_lld OFF CACHE BOOL "try lld linker, clang only" FORCE)
|
|
||||||
endif ()
|
|
||||||
option (jemalloc "Enables jemalloc for heap profiling" OFF)
|
|
||||||
option (werr "treat warnings as errors" OFF)
|
|
||||||
option (local_protobuf
|
|
||||||
"Force a local build of protobuf instead of looking for an installed version." OFF)
|
|
||||||
option (local_grpc
|
|
||||||
"Force a local build of gRPC instead of looking for an installed version." OFF)
|
|
||||||
|
|
||||||
# this one is a string and therefore can't be an option
|
|
||||||
set (san "" CACHE STRING "On gcc & clang, add sanitizer instrumentation")
|
|
||||||
set_property (CACHE san PROPERTY STRINGS ";undefined;memory;address;thread")
|
|
||||||
if (san)
|
|
||||||
string (TOLOWER ${san} san)
|
|
||||||
set (SAN_FLAG "-fsanitize=${san}")
|
|
||||||
set (SAN_LIB "")
|
|
||||||
if (is_gcc)
|
|
||||||
if (san STREQUAL "address")
|
|
||||||
set (SAN_LIB "asan")
|
|
||||||
elseif (san STREQUAL "thread")
|
|
||||||
set (SAN_LIB "tsan")
|
|
||||||
elseif (san STREQUAL "memory")
|
|
||||||
set (SAN_LIB "msan")
|
|
||||||
elseif (san STREQUAL "undefined")
|
|
||||||
set (SAN_LIB "ubsan")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
set (_saved_CRL ${CMAKE_REQUIRED_LIBRARIES})
|
|
||||||
set (CMAKE_REQUIRED_LIBRARIES "${SAN_FLAG};${SAN_LIB}")
|
|
||||||
check_cxx_compiler_flag (${SAN_FLAG} COMPILER_SUPPORTS_SAN)
|
|
||||||
set (CMAKE_REQUIRED_LIBRARIES ${_saved_CRL})
|
|
||||||
if (NOT COMPILER_SUPPORTS_SAN)
|
|
||||||
message (FATAL_ERROR "${san} sanitizer does not seem to be supported by your compiler")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
set (container_label "" CACHE STRING "tag to use for package building containers")
|
|
||||||
option (packages_only
|
|
||||||
"ONLY generate package building targets. This is special use-case and almost \
|
|
||||||
certainly not what you want. Use with caution as you won't be able to build \
|
|
||||||
any compiled targets locally." OFF)
|
|
||||||
option (have_package_container
|
|
||||||
"Sometimes you already have the tagged container you want to use for package \
|
|
||||||
building and you don't want docker to rebuild it. This flag will detach the \
|
|
||||||
dependency of the package build from the container build. It's an advanced \
|
|
||||||
use case and most likely you should not be touching this flag." OFF)
|
|
||||||
|
|
||||||
# the remaining options are obscure and rarely used
|
|
||||||
option (beast_no_unit_test_inline
|
|
||||||
"Prevents unit test definitions from being inserted into global table"
|
|
||||||
OFF)
|
|
||||||
option (single_io_service_thread
|
|
||||||
"Restricts the number of threads calling io_service::run to one. \
|
|
||||||
This can be useful when debugging."
|
|
||||||
OFF)
|
|
||||||
option (boost_show_deprecated
|
|
||||||
"Allow boost to fail on deprecated usage. Only useful if you're trying\
|
|
||||||
to find deprecated calls."
|
|
||||||
OFF)
|
|
||||||
option (beast_hashers
|
|
||||||
"Use local implementations for sha/ripemd hashes (experimental, not recommended)"
|
|
||||||
OFF)
|
|
||||||
|
|
||||||
if (WIN32)
|
|
||||||
option (beast_disable_autolink "Disables autolinking of system libraries on WIN32" OFF)
|
|
||||||
else ()
|
|
||||||
set (beast_disable_autolink OFF CACHE BOOL "WIN32 only" FORCE)
|
|
||||||
endif ()
|
|
||||||
if (coverage)
|
|
||||||
message (STATUS "coverage build requested - forcing Debug build")
|
|
||||||
set (CMAKE_BUILD_TYPE Debug CACHE STRING "build type" FORCE)
|
|
||||||
endif ()
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#[===================================================================[
|
|
||||||
read version from source
|
|
||||||
#]===================================================================]
|
|
||||||
|
|
||||||
file (STRINGS src/ripple/protocol/impl/BuildInfo.cpp BUILD_INFO)
|
|
||||||
foreach (line_ ${BUILD_INFO})
|
|
||||||
if (line_ MATCHES "versionString[ ]*=[ ]*\"(.+)\"")
|
|
||||||
set (rippled_version ${CMAKE_MATCH_1})
|
|
||||||
endif ()
|
|
||||||
endforeach ()
|
|
||||||
if (rippled_version)
|
|
||||||
message (STATUS "rippled version: ${rippled_version}")
|
|
||||||
else ()
|
|
||||||
message (FATAL_ERROR "unable to determine rippled version")
|
|
||||||
endif ()
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
# SociConfig.cmake - CMake build configuration of SOCI library
|
|
||||||
################################################################################
|
|
||||||
# Copyright (C) 2010 Mateusz Loskot <mateusz@loskot.net>
|
|
||||||
#
|
|
||||||
# Distributed under the Boost Software License, Version 1.0.
|
|
||||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
||||||
# http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
include(CheckCXXSymbolExists)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
check_cxx_symbol_exists("_M_AMD64" "" SOCI_TARGET_ARCH_X64)
|
|
||||||
if(NOT RTC_ARCH_X64)
|
|
||||||
check_cxx_symbol_exists("_M_IX86" "" SOCI_TARGET_ARCH_X86)
|
|
||||||
endif(NOT RTC_ARCH_X64)
|
|
||||||
# add check for arm here
|
|
||||||
# see http://msdn.microsoft.com/en-us/library/b0084kay.aspx
|
|
||||||
else(WIN32)
|
|
||||||
check_cxx_symbol_exists("__i386__" "" SOCI_TARGET_ARCH_X86)
|
|
||||||
check_cxx_symbol_exists("__x86_64__" "" SOCI_TARGET_ARCH_X64)
|
|
||||||
check_cxx_symbol_exists("__arm__" "" SOCI_TARGET_ARCH_ARM)
|
|
||||||
endif(WIN32)
|
|
||||||
|
|
||||||
if(NOT DEFINED LIB_SUFFIX)
|
|
||||||
if(SOCI_TARGET_ARCH_X64)
|
|
||||||
set(_lib_suffix "64")
|
|
||||||
else()
|
|
||||||
set(_lib_suffix "")
|
|
||||||
endif()
|
|
||||||
set(LIB_SUFFIX ${_lib_suffix} CACHE STRING "Specifies suffix for the lib directory")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#
|
|
||||||
# C++11 Option
|
|
||||||
#
|
|
||||||
|
|
||||||
if(NOT SOCI_CXX_C11)
|
|
||||||
set (SOCI_CXX_C11 OFF CACHE BOOL "Build to the C++11 standard")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#
|
|
||||||
# Force compilation flags and set desired warnings level
|
|
||||||
#
|
|
||||||
|
|
||||||
if (MSVC)
|
|
||||||
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
|
||||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
||||||
add_definitions(-D_CRT_NONSTDC_NO_WARNING)
|
|
||||||
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
|
|
||||||
|
|
||||||
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
|
||||||
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
||||||
else()
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /we4266")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
else()
|
|
||||||
|
|
||||||
set(SOCI_GCC_CLANG_COMMON_FLAGS "")
|
|
||||||
# "-pedantic -Werror -Wno-error=parentheses -Wall -Wextra -Wpointer-arith -Wcast-align -Wcast-qual -Wfloat-equal -Woverloaded-virtual -Wredundant-decls -Wno-long-long")
|
|
||||||
|
|
||||||
|
|
||||||
if (SOCI_CXX_C11)
|
|
||||||
set(SOCI_CXX_VERSION_FLAGS "-std=c++11")
|
|
||||||
else()
|
|
||||||
set(SOCI_CXX_VERSION_FLAGS "-std=gnu++98")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR "${CMAKE_CXX_COMPILER}" MATCHES "clang")
|
|
||||||
|
|
||||||
if(NOT CMAKE_CXX_COMPILER_VERSION LESS 3.1 AND SOCI_ASAN)
|
|
||||||
set(SOCI_GCC_CLANG_COMMON_FLAGS "${SOCI_GCC_CLANG_COMMON_FLAGS} -fsanitize=address")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# enforce C++11 for Clang
|
|
||||||
set(SOCI_CXX_C11 ON)
|
|
||||||
set(SOCI_CXX_VERSION_FLAGS "-std=c++11")
|
|
||||||
add_definitions(-DCATCH_CONFIG_CPP11_NO_IS_ENUM)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SOCI_GCC_CLANG_COMMON_FLAGS} ${SOCI_CXX_VERSION_FLAGS}")
|
|
||||||
|
|
||||||
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
|
|
||||||
|
|
||||||
if(NOT CMAKE_CXX_COMPILER_VERSION LESS 4.8 AND SOCI_ASAN)
|
|
||||||
set(SOCI_GCC_CLANG_COMMON_FLAGS "${SOCI_GCC_CLANG_COMMON_FLAGS} -fsanitize=address")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SOCI_GCC_CLANG_COMMON_FLAGS} ${SOCI_CXX_VERSION_FLAGS} ")
|
|
||||||
if (CMAKE_COMPILER_IS_GNUCXX)
|
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
||||||
else()
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-variadic-macros")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
else()
|
|
||||||
message(WARNING "Unknown toolset - using default flags to build SOCI")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set SOCI_HAVE_* variables for soci-config.h generator
|
|
||||||
set(SOCI_HAVE_CXX_C11 ${SOCI_CXX_C11} CACHE INTERNAL "Enables C++11 support")
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
find_package(Protobuf 3.8)
|
|
||||||
|
|
||||||
set(output_dir ${CMAKE_BINARY_DIR}/proto_gen)
|
|
||||||
file(MAKE_DIRECTORY ${output_dir})
|
|
||||||
set(ccbd ${CMAKE_CURRENT_BINARY_DIR})
|
|
||||||
set(CMAKE_CURRENT_BINARY_DIR ${output_dir})
|
|
||||||
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS src/ripple/proto/ripple.proto)
|
|
||||||
set(CMAKE_CURRENT_BINARY_DIR ${ccbd})
|
|
||||||
|
|
||||||
target_include_directories(xrpl_core SYSTEM PUBLIC
|
|
||||||
# The generated implementation imports the header relative to the output
|
|
||||||
# directory.
|
|
||||||
$<BUILD_INTERFACE:${output_dir}>
|
|
||||||
$<BUILD_INTERFACE:${output_dir}/src>
|
|
||||||
)
|
|
||||||
target_sources(xrpl_core PRIVATE ${output_dir}/src/ripple/proto/ripple.pb.cc)
|
|
||||||
install(
|
|
||||||
FILES ${output_dir}/src/ripple/proto/ripple.pb.h
|
|
||||||
DESTINATION include/ripple/proto)
|
|
||||||
target_link_libraries(xrpl_core PUBLIC protobuf::libprotobuf)
|
|
||||||
target_compile_options(xrpl_core
|
|
||||||
PUBLIC
|
|
||||||
$<$<BOOL:${XCODE}>:
|
|
||||||
--system-header-prefix="google/protobuf"
|
|
||||||
-Wno-deprecated-dynamic-exception-spec
|
|
||||||
>
|
|
||||||
)
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
find_package(gRPC 1.23)
|
|
||||||
|
|
||||||
#[=================================[
|
|
||||||
generate protobuf sources for
|
|
||||||
grpc defs and bundle into a
|
|
||||||
static lib
|
|
||||||
#]=================================]
|
|
||||||
set(output_dir "${CMAKE_BINARY_DIR}/proto_gen_grpc")
|
|
||||||
set(GRPC_GEN_DIR "${output_dir}/ripple/proto")
|
|
||||||
file(MAKE_DIRECTORY ${GRPC_GEN_DIR})
|
|
||||||
set(GRPC_PROTO_SRCS)
|
|
||||||
set(GRPC_PROTO_HDRS)
|
|
||||||
set(GRPC_PROTO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/src/ripple/proto/org")
|
|
||||||
file(GLOB_RECURSE GRPC_DEFINITION_FILES "${GRPC_PROTO_ROOT}/*.proto")
|
|
||||||
foreach(file ${GRPC_DEFINITION_FILES})
|
|
||||||
# /home/user/rippled/src/ripple/proto/org/.../v1/get_ledger.proto
|
|
||||||
get_filename_component(_abs_file ${file} ABSOLUTE)
|
|
||||||
# /home/user/rippled/src/ripple/proto/org/.../v1
|
|
||||||
get_filename_component(_abs_dir ${_abs_file} DIRECTORY)
|
|
||||||
# get_ledger
|
|
||||||
get_filename_component(_basename ${file} NAME_WE)
|
|
||||||
# /home/user/rippled/src/ripple/proto
|
|
||||||
get_filename_component(_proto_inc ${GRPC_PROTO_ROOT} DIRECTORY) # updir one level
|
|
||||||
# org/.../v1/get_ledger.proto
|
|
||||||
file(RELATIVE_PATH _rel_root_file ${_proto_inc} ${_abs_file})
|
|
||||||
# org/.../v1
|
|
||||||
get_filename_component(_rel_root_dir ${_rel_root_file} DIRECTORY)
|
|
||||||
# src/ripple/proto/org/.../v1
|
|
||||||
file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir})
|
|
||||||
|
|
||||||
# .cmake/proto_gen_grpc/ripple/proto/org/.../v1/get_ledger.grpc.pb.cc
|
|
||||||
set(src_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.cc")
|
|
||||||
set(src_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.cc")
|
|
||||||
set(hdr_1 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.grpc.pb.h")
|
|
||||||
set(hdr_2 "${GRPC_GEN_DIR}/${_rel_root_dir}/${_basename}.pb.h")
|
|
||||||
add_custom_command(
|
|
||||||
OUTPUT ${src_1} ${src_2} ${hdr_1} ${hdr_2}
|
|
||||||
COMMAND protobuf::protoc
|
|
||||||
ARGS --grpc_out=${GRPC_GEN_DIR}
|
|
||||||
--cpp_out=${GRPC_GEN_DIR}
|
|
||||||
--plugin=protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin>
|
|
||||||
-I ${_proto_inc} -I ${_rel_dir}
|
|
||||||
${_abs_file}
|
|
||||||
DEPENDS ${_abs_file} protobuf::protoc gRPC::grpc_cpp_plugin
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
COMMENT "Running gRPC C++ protocol buffer compiler on ${file}"
|
|
||||||
VERBATIM)
|
|
||||||
set_source_files_properties(${src_1} ${src_2} ${hdr_1} ${hdr_2} PROPERTIES
|
|
||||||
GENERATED TRUE
|
|
||||||
SKIP_UNITY_BUILD_INCLUSION ON
|
|
||||||
)
|
|
||||||
list(APPEND GRPC_PROTO_SRCS ${src_1} ${src_2})
|
|
||||||
list(APPEND GRPC_PROTO_HDRS ${hdr_1} ${hdr_2})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
target_include_directories(xrpl_core SYSTEM PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${output_dir}>
|
|
||||||
$<BUILD_INTERFACE:${output_dir}/ripple/proto>
|
|
||||||
# The generated sources include headers relative to this path. Fix it later.
|
|
||||||
$<INSTALL_INTERFACE:include/ripple/proto>
|
|
||||||
)
|
|
||||||
target_sources(xrpl_core PRIVATE ${GRPC_PROTO_SRCS})
|
|
||||||
install(
|
|
||||||
DIRECTORY ${output_dir}/ripple
|
|
||||||
DESTINATION include/
|
|
||||||
FILES_MATCHING PATTERN "*.h"
|
|
||||||
)
|
|
||||||
target_link_libraries(xrpl_core PUBLIC
|
|
||||||
"gRPC::grpc++"
|
|
||||||
# libgrpc is missing references.
|
|
||||||
absl::random_random
|
|
||||||
)
|
|
||||||
target_compile_options(xrpl_core
|
|
||||||
PRIVATE
|
|
||||||
$<$<BOOL:${MSVC}>:-wd4065>
|
|
||||||
$<$<NOT:$<BOOL:${MSVC}>>:-Wno-deprecated-declarations>
|
|
||||||
PUBLIC
|
|
||||||
$<$<BOOL:${MSVC}>:-wd4996>
|
|
||||||
$<$<BOOL:${XCODE}>:
|
|
||||||
--system-header-prefix="google/protobuf"
|
|
||||||
-Wno-deprecated-dynamic-exception-spec
|
|
||||||
>)
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#[=========================================================[
|
|
||||||
This is a CMake script file that is used to write
|
|
||||||
the contents of a file to stdout (using the cmake
|
|
||||||
echo command). The input file is passed via the
|
|
||||||
IN_FILE variable.
|
|
||||||
#]=========================================================]
|
|
||||||
|
|
||||||
if (EXISTS ${IN_FILE})
|
|
||||||
file (READ ${IN_FILE} contents)
|
|
||||||
## only print files that actually have some text in them
|
|
||||||
if (contents MATCHES "[a-z0-9A-Z]+")
|
|
||||||
execute_process(
|
|
||||||
COMMAND
|
|
||||||
${CMAKE_COMMAND} -E echo "${contents}")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
[Please see the BUILD instructions here](../BUILD.md)
|
|
||||||
405
Builds/Test.py
405
Builds/Test.py
@@ -1,405 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# This file is part of rippled: https://github.com/ripple/rippled
|
|
||||||
# Copyright (c) 2012 - 2017 Ripple Labs Inc.
|
|
||||||
#
|
|
||||||
# Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
# purpose with or without fee is hereby granted, provided that the above
|
|
||||||
# copyright notice and this permission notice appear in all copies.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
# ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
||||||
"""
|
|
||||||
Invocation:
|
|
||||||
|
|
||||||
./Builds/Test.py - builds and tests all configurations
|
|
||||||
|
|
||||||
The build must succeed without shell aliases for this to work.
|
|
||||||
|
|
||||||
To pass flags to cmake, put them at the very end of the command line, after
|
|
||||||
the -- flag - like this:
|
|
||||||
|
|
||||||
./Builds/Test.py -- -j4 # Pass -j4 to cmake --build
|
|
||||||
|
|
||||||
|
|
||||||
Common problems:
|
|
||||||
|
|
||||||
1) Boost not found. Solution: export BOOST_ROOT=[path to boost folder]
|
|
||||||
|
|
||||||
2) OpenSSL not found. Solution: export OPENSSL_ROOT=[path to OpenSSL folder]
|
|
||||||
|
|
||||||
3) cmake is not found. Solution: Be sure cmake directory is on your $PATH
|
|
||||||
|
|
||||||
"""
|
|
||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import itertools
|
|
||||||
import os
|
|
||||||
import platform
|
|
||||||
import re
|
|
||||||
import shutil
|
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
|
|
||||||
def powerset(iterable):
|
|
||||||
"""powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"""
|
|
||||||
s = list(iterable)
|
|
||||||
return itertools.chain.from_iterable(itertools.combinations(s, r) for r in range(len(s) + 1))
|
|
||||||
|
|
||||||
IS_WINDOWS = platform.system().lower() == 'windows'
|
|
||||||
IS_OS_X = platform.system().lower() == 'darwin'
|
|
||||||
|
|
||||||
# CMake
|
|
||||||
if IS_WINDOWS:
|
|
||||||
CMAKE_UNITY_CONFIGS = ['Debug', 'Release']
|
|
||||||
CMAKE_NONUNITY_CONFIGS = ['Debug', 'Release']
|
|
||||||
else:
|
|
||||||
CMAKE_UNITY_CONFIGS = []
|
|
||||||
CMAKE_NONUNITY_CONFIGS = []
|
|
||||||
CMAKE_UNITY_COMBOS = { '' : [['rippled'], CMAKE_UNITY_CONFIGS],
|
|
||||||
'.nounity' : [['rippled'], CMAKE_NONUNITY_CONFIGS] }
|
|
||||||
|
|
||||||
if IS_WINDOWS:
|
|
||||||
CMAKE_DIR_TARGETS = { ('msvc' + unity,) : targets for unity, targets in
|
|
||||||
CMAKE_UNITY_COMBOS.items() }
|
|
||||||
elif IS_OS_X:
|
|
||||||
CMAKE_DIR_TARGETS = { (build + unity,) : targets
|
|
||||||
for build in ['debug', 'release']
|
|
||||||
for unity, targets in CMAKE_UNITY_COMBOS.items() }
|
|
||||||
else:
|
|
||||||
CMAKE_DIR_TARGETS = { (cc + "." + build + unity,) : targets
|
|
||||||
for cc in ['gcc', 'clang']
|
|
||||||
for build in ['debug', 'release', 'coverage', 'profile']
|
|
||||||
for unity, targets in CMAKE_UNITY_COMBOS.items() }
|
|
||||||
|
|
||||||
# list of tuples of all possible options
|
|
||||||
if IS_WINDOWS or IS_OS_X:
|
|
||||||
CMAKE_ALL_GENERATE_OPTIONS = [tuple(x) for x in powerset(['-GNinja', '-Dassert=true'])]
|
|
||||||
else:
|
|
||||||
CMAKE_ALL_GENERATE_OPTIONS = list(set(
|
|
||||||
[tuple(x) for x in powerset(['-GNinja', '-Dstatic=true', '-Dassert=true', '-Dsan=address'])] +
|
|
||||||
[tuple(x) for x in powerset(['-GNinja', '-Dstatic=true', '-Dassert=true', '-Dsan=thread'])]))
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description='Test.py - run ripple tests'
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--all', '-a',
|
|
||||||
action='store_true',
|
|
||||||
help='Build all configurations.',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--keep_going', '-k',
|
|
||||||
action='store_true',
|
|
||||||
help='Keep going after one configuration has failed.',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--silent', '-s',
|
|
||||||
action='store_true',
|
|
||||||
help='Silence all messages except errors',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--verbose', '-v',
|
|
||||||
action='store_true',
|
|
||||||
help=('Report more information about which commands are executed and the '
|
|
||||||
'results.'),
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--test', '-t',
|
|
||||||
default='',
|
|
||||||
help='Add a prefix for unit tests',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--testjobs',
|
|
||||||
default='0',
|
|
||||||
type=int,
|
|
||||||
help='Run tests in parallel'
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--ipv6',
|
|
||||||
action='store_true',
|
|
||||||
help='Use IPv6 localhost when running unit tests.',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--clean', '-c',
|
|
||||||
action='store_true',
|
|
||||||
help='delete all build artifacts after testing',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--quiet', '-q',
|
|
||||||
action='store_true',
|
|
||||||
help='Reduce output where possible (unit tests)',
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--dir', '-d',
|
|
||||||
default=(),
|
|
||||||
nargs='*',
|
|
||||||
help='Specify one or more CMake dir names. '
|
|
||||||
'Will also be used as -Dtarget=<dir> running cmake.'
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--target',
|
|
||||||
default=(),
|
|
||||||
nargs='*',
|
|
||||||
help='Specify one or more CMake build targets. '
|
|
||||||
'Will be used as --target <target> running cmake --build.'
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--config',
|
|
||||||
default=(),
|
|
||||||
nargs='*',
|
|
||||||
help='Specify one or more CMake build configs. '
|
|
||||||
'Will be used as --config <config> running cmake --build.'
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--generator_option',
|
|
||||||
action='append',
|
|
||||||
help='Specify a CMake generator option. Repeat for multiple options. '
|
|
||||||
'Will be passed to the cmake generator. '
|
|
||||||
'Due to limits of the argument parser, arguments starting with \'-\' '
|
|
||||||
'must be attached to this option. e.g. --generator_option=-GNinja.')
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'--build_option',
|
|
||||||
action='append',
|
|
||||||
help='Specify a build option. Repeat for multiple options. '
|
|
||||||
'Will be passed to the build tool via cmake --build. '
|
|
||||||
'Due to limits of the argument parser, arguments starting with \'-\' '
|
|
||||||
'must be attached to this option. e.g. --build_option=-j8.')
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
'extra_args',
|
|
||||||
default=(),
|
|
||||||
nargs='*',
|
|
||||||
help='Extra arguments are passed through to the tools'
|
|
||||||
)
|
|
||||||
|
|
||||||
ARGS = parser.parse_args()
|
|
||||||
|
|
||||||
def decodeString(line):
|
|
||||||
# Python 2 vs. Python 3
|
|
||||||
if isinstance(line, str):
|
|
||||||
return line
|
|
||||||
else:
|
|
||||||
return line.decode()
|
|
||||||
|
|
||||||
def shell(cmd, args=(), silent=False, cust_env=None):
|
|
||||||
""""Execute a shell command and return the output."""
|
|
||||||
silent = ARGS.silent or silent
|
|
||||||
verbose = not silent and ARGS.verbose
|
|
||||||
if verbose:
|
|
||||||
print('$' + cmd, *args)
|
|
||||||
|
|
||||||
command = (cmd,) + args
|
|
||||||
|
|
||||||
# shell is needed in Windows to find executable in the path
|
|
||||||
process = subprocess.Popen(
|
|
||||||
command,
|
|
||||||
stdin=subprocess.PIPE,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
stderr=subprocess.STDOUT,
|
|
||||||
env=cust_env,
|
|
||||||
shell=IS_WINDOWS)
|
|
||||||
lines = []
|
|
||||||
count = 0
|
|
||||||
# readline returns '' at EOF
|
|
||||||
for line in iter(process.stdout.readline, ''):
|
|
||||||
if process.poll() is None:
|
|
||||||
decoded = decodeString(line)
|
|
||||||
lines.append(decoded)
|
|
||||||
if verbose:
|
|
||||||
print(decoded, end='')
|
|
||||||
elif not silent:
|
|
||||||
count += 1
|
|
||||||
if count >= 80:
|
|
||||||
print()
|
|
||||||
count = 0
|
|
||||||
else:
|
|
||||||
print('.', end='')
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
|
|
||||||
if not verbose and count:
|
|
||||||
print()
|
|
||||||
process.wait()
|
|
||||||
return process.returncode, lines
|
|
||||||
|
|
||||||
def get_cmake_dir(cmake_dir):
|
|
||||||
return os.path.join('build' , 'cmake' , cmake_dir)
|
|
||||||
|
|
||||||
def run_cmake(directory, cmake_dir, args):
|
|
||||||
print('Generating build in', directory, 'with', *args or ('default options',))
|
|
||||||
old_dir = os.getcwd()
|
|
||||||
if not os.path.exists(directory):
|
|
||||||
os.makedirs(directory)
|
|
||||||
os.chdir(directory)
|
|
||||||
if IS_WINDOWS and not any(arg.startswith("-G") for arg in args) and not os.path.exists("CMakeCache.txt"):
|
|
||||||
if '--ninja' in args:
|
|
||||||
args += ( '-GNinja', )
|
|
||||||
else:
|
|
||||||
args += ( '-GVisual Studio 14 2015 Win64', )
|
|
||||||
# hack to extract cmake options/args from the legacy target format
|
|
||||||
if re.search('\.unity', cmake_dir):
|
|
||||||
args += ( '-Dunity=ON', )
|
|
||||||
if re.search('\.nounity', cmake_dir):
|
|
||||||
args += ( '-Dunity=OFF', )
|
|
||||||
if re.search('coverage', cmake_dir):
|
|
||||||
args += ( '-Dcoverage=ON', )
|
|
||||||
if re.search('profile', cmake_dir):
|
|
||||||
args += ( '-Dprofile=ON', )
|
|
||||||
if re.search('debug', cmake_dir):
|
|
||||||
args += ( '-DCMAKE_BUILD_TYPE=Debug', )
|
|
||||||
if re.search('release', cmake_dir):
|
|
||||||
args += ( '-DCMAKE_BUILD_TYPE=Release', )
|
|
||||||
m = re.search('gcc(-[^.]*)', cmake_dir)
|
|
||||||
if m:
|
|
||||||
args += ( '-DCMAKE_C_COMPILER=' + m.group(0),
|
|
||||||
'-DCMAKE_CXX_COMPILER=g++' + m.group(1), )
|
|
||||||
elif re.search('gcc', cmake_dir):
|
|
||||||
args += ( '-DCMAKE_C_COMPILER=gcc', '-DCMAKE_CXX_COMPILER=g++', )
|
|
||||||
m = re.search('clang(-[^.]*)', cmake_dir)
|
|
||||||
if m:
|
|
||||||
args += ( '-DCMAKE_C_COMPILER=' + m.group(0),
|
|
||||||
'-DCMAKE_CXX_COMPILER=clang++' + m.group(1), )
|
|
||||||
elif re.search('clang', cmake_dir):
|
|
||||||
args += ( '-DCMAKE_C_COMPILER=clang', '-DCMAKE_CXX_COMPILER=clang++', )
|
|
||||||
|
|
||||||
args += ( os.path.join('..', '..', '..'), )
|
|
||||||
resultcode, lines = shell('cmake', args)
|
|
||||||
|
|
||||||
if resultcode:
|
|
||||||
print('Generating FAILED:')
|
|
||||||
if not ARGS.verbose:
|
|
||||||
print(*lines, sep='')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
os.chdir(old_dir)
|
|
||||||
|
|
||||||
def run_cmake_build(directory, target, config, args):
|
|
||||||
print('Building', target, config, 'in', directory, 'with', *args or ('default options',))
|
|
||||||
build_args=('--build', directory)
|
|
||||||
if target:
|
|
||||||
build_args += ('--target', target)
|
|
||||||
if config:
|
|
||||||
build_args += ('--config', config)
|
|
||||||
if args:
|
|
||||||
build_args += ('--',)
|
|
||||||
build_args += tuple(args)
|
|
||||||
resultcode, lines = shell('cmake', build_args)
|
|
||||||
|
|
||||||
if resultcode:
|
|
||||||
print('Build FAILED:')
|
|
||||||
if not ARGS.verbose:
|
|
||||||
print(*lines, sep='')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
def run_cmake_tests(directory, target, config):
|
|
||||||
failed = []
|
|
||||||
if IS_WINDOWS:
|
|
||||||
target += '.exe'
|
|
||||||
executable = os.path.join(directory, config if config else 'Debug', target)
|
|
||||||
if(not os.path.exists(executable)):
|
|
||||||
executable = os.path.join(directory, target)
|
|
||||||
print('Unit tests for', executable)
|
|
||||||
testflag = '--unittest'
|
|
||||||
quiet = ''
|
|
||||||
testjobs = ''
|
|
||||||
ipv6 = ''
|
|
||||||
if ARGS.test:
|
|
||||||
testflag += ('=' + ARGS.test)
|
|
||||||
if ARGS.quiet:
|
|
||||||
quiet = '-q'
|
|
||||||
if ARGS.ipv6:
|
|
||||||
ipv6 = '--unittest-ipv6'
|
|
||||||
if ARGS.testjobs:
|
|
||||||
testjobs = ('--unittest-jobs=' + str(ARGS.testjobs))
|
|
||||||
resultcode, lines = shell(executable, (testflag, quiet, testjobs, ipv6))
|
|
||||||
|
|
||||||
if resultcode:
|
|
||||||
if not ARGS.verbose:
|
|
||||||
print('ERROR:', *lines, sep='')
|
|
||||||
failed.append([target, 'unittest'])
|
|
||||||
|
|
||||||
return failed
|
|
||||||
|
|
||||||
def main():
|
|
||||||
all_failed = []
|
|
||||||
if ARGS.all:
|
|
||||||
build_dir_targets = CMAKE_DIR_TARGETS
|
|
||||||
generator_options = CMAKE_ALL_GENERATE_OPTIONS
|
|
||||||
else:
|
|
||||||
build_dir_targets = { tuple(ARGS.dir) : [ARGS.target, ARGS.config] }
|
|
||||||
if ARGS.generator_option:
|
|
||||||
generator_options = [tuple(ARGS.generator_option)]
|
|
||||||
else:
|
|
||||||
generator_options = [tuple()]
|
|
||||||
|
|
||||||
if not build_dir_targets:
|
|
||||||
# Let CMake choose the build tool.
|
|
||||||
build_dir_targets = { () : [] }
|
|
||||||
|
|
||||||
if ARGS.build_option:
|
|
||||||
ARGS.build_option = ARGS.build_option + list(ARGS.extra_args)
|
|
||||||
else:
|
|
||||||
ARGS.build_option = list(ARGS.extra_args)
|
|
||||||
|
|
||||||
for args in generator_options:
|
|
||||||
for build_dirs, (build_targets, build_configs) in build_dir_targets.items():
|
|
||||||
if not build_dirs:
|
|
||||||
build_dirs = ('default',)
|
|
||||||
if not build_targets:
|
|
||||||
build_targets = ('rippled',)
|
|
||||||
if not build_configs:
|
|
||||||
build_configs = ('',)
|
|
||||||
for cmake_dir in build_dirs:
|
|
||||||
cmake_full_dir = get_cmake_dir(cmake_dir)
|
|
||||||
run_cmake(cmake_full_dir, cmake_dir, args)
|
|
||||||
|
|
||||||
for target in build_targets:
|
|
||||||
for config in build_configs:
|
|
||||||
run_cmake_build(cmake_full_dir, target, config, ARGS.build_option)
|
|
||||||
failed = run_cmake_tests(cmake_full_dir, target, config)
|
|
||||||
|
|
||||||
if failed:
|
|
||||||
print('FAILED:', *(':'.join(f) for f in failed))
|
|
||||||
if not ARGS.keep_going:
|
|
||||||
sys.exit(1)
|
|
||||||
else:
|
|
||||||
all_failed.extend([decodeString(cmake_dir +
|
|
||||||
"." + target + "." + config), ':'.join(f)]
|
|
||||||
for f in failed)
|
|
||||||
else:
|
|
||||||
print('Success')
|
|
||||||
if ARGS.clean:
|
|
||||||
shutil.rmtree(cmake_full_dir)
|
|
||||||
|
|
||||||
if all_failed:
|
|
||||||
if len(all_failed) > 1:
|
|
||||||
print()
|
|
||||||
print('FAILED:', *(':'.join(f) for f in all_failed))
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
sys.exit(0)
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
num_procs=$(lscpu -p | grep -v '^#' | sort -u -t, -k 2,4 | wc -l) # number of physical cores
|
|
||||||
|
|
||||||
path=$(cd $(dirname $0) && pwd)
|
|
||||||
cd $(dirname $path)
|
|
||||||
${path}/Test.py -a -c --testjobs=${num_procs} -- -j${num_procs}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
|
|
||||||
# rippled Packaging and Containers
|
|
||||||
|
|
||||||
This folder contains docker container definitions and configuration
|
|
||||||
files to support building rpm and deb packages of rippled. The container
|
|
||||||
definitions include some additional software/packages that are used
|
|
||||||
for general build/test CI workflows of rippled but are not explicitly
|
|
||||||
needed for the package building workflow.
|
|
||||||
|
|
||||||
## CMake Targets
|
|
||||||
|
|
||||||
If you have docker installed on your local system, then the main
|
|
||||||
CMake file will enable several targets related to building packages:
|
|
||||||
`rpm_container`, `rpm`, `dpkg_container`, and `dpkg`. The package targets
|
|
||||||
depend on the container targets and will trigger a build of those first.
|
|
||||||
The container builds can take several dozen minutes to complete (depending
|
|
||||||
on hardware specs), so quick build cycles are not possible currently. As
|
|
||||||
such, these targets are often best suited to CI/automated build systems.
|
|
||||||
|
|
||||||
The package build can be invoked like any other cmake target from the
|
|
||||||
rippled root folder:
|
|
||||||
```
|
|
||||||
mkdir -p build/pkg && cd build/pkg
|
|
||||||
cmake -Dpackages_only=ON ../..
|
|
||||||
cmake --build . --target rpm
|
|
||||||
```
|
|
||||||
Upon successful completion, the generated package files will be in
|
|
||||||
the `build/pkg/packages` directory. For deb packages, simply replace
|
|
||||||
`rpm` with `dpkg` in the build command above.
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
FROM rippleci/centos:7
|
|
||||||
ARG GIT_COMMIT=unknown
|
|
||||||
ARG CI_USE=false
|
|
||||||
|
|
||||||
LABEL git-commit=$GIT_COMMIT
|
|
||||||
|
|
||||||
COPY centos-builder/centos_setup.sh /tmp/
|
|
||||||
COPY shared/install_cmake.sh /tmp/
|
|
||||||
RUN chmod +x /tmp/centos_setup.sh && \
|
|
||||||
chmod +x /tmp/install_cmake.sh
|
|
||||||
RUN /tmp/centos_setup.sh
|
|
||||||
|
|
||||||
RUN /tmp/install_cmake.sh 3.16.3 /opt/local/cmake-3.16
|
|
||||||
RUN ln -s /opt/local/cmake-3.16 /opt/local/cmake
|
|
||||||
ENV PATH="/opt/local/cmake/bin:$PATH"
|
|
||||||
# TODO: Install latest CMake for testing
|
|
||||||
RUN if [ "${CI_USE}" = true ] ; then /tmp/install_cmake.sh 3.16.3 /opt/local/cmake-3.16; fi
|
|
||||||
|
|
||||||
RUN mkdir -m 777 -p /opt/rippled_bld/pkg
|
|
||||||
|
|
||||||
WORKDIR /opt/rippled_bld/pkg
|
|
||||||
RUN mkdir -m 777 ./rpmbuild
|
|
||||||
RUN mkdir -m 777 ./rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
|
|
||||||
|
|
||||||
COPY packaging/rpm/build_rpm.sh ./
|
|
||||||
CMD ./build_rpm.sh
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
source /etc/os-release
|
|
||||||
|
|
||||||
yum -y upgrade
|
|
||||||
yum -y update
|
|
||||||
yum -y install epel-release centos-release-scl
|
|
||||||
yum -y install \
|
|
||||||
wget curl time gcc-c++ yum-utils autoconf automake pkgconfig libtool \
|
|
||||||
libstdc++-static rpm-build gnupg which make cmake \
|
|
||||||
devtoolset-11 devtoolset-11-gdb devtoolset-11-binutils devtoolset-11-libstdc++-devel \
|
|
||||||
devtoolset-11-libasan-devel devtoolset-11-libtsan-devel devtoolset-11-libubsan-devel devtoolset-11-liblsan-devel \
|
|
||||||
flex flex-devel bison bison-devel parallel \
|
|
||||||
ncurses ncurses-devel ncurses-libs graphviz graphviz-devel \
|
|
||||||
lzip p7zip bzip2 bzip2-devel lzma-sdk lzma-sdk-devel xz-devel \
|
|
||||||
zlib zlib-devel zlib-static texinfo openssl openssl-static \
|
|
||||||
jemalloc jemalloc-devel \
|
|
||||||
libicu-devel htop \
|
|
||||||
rh-python38 \
|
|
||||||
ninja-build git svn \
|
|
||||||
swig perl-Digest-MD5
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
set -ex
|
|
||||||
pkgtype=$1
|
|
||||||
if [ "${pkgtype}" = "rpm" ] ; then
|
|
||||||
container_name="${RPM_CONTAINER_NAME}"
|
|
||||||
elif [ "${pkgtype}" = "dpkg" ] ; then
|
|
||||||
container_name="${DPKG_CONTAINER_NAME}"
|
|
||||||
else
|
|
||||||
echo "invalid package type"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if docker pull "${ARTIFACTORY_HUB}/${container_name}:latest_${CI_COMMIT_REF_SLUG}"; then
|
|
||||||
echo "found container for latest - using as cache."
|
|
||||||
docker tag \
|
|
||||||
"${ARTIFACTORY_HUB}/${container_name}:latest_${CI_COMMIT_REF_SLUG}" \
|
|
||||||
"${container_name}:latest_${CI_COMMIT_REF_SLUG}"
|
|
||||||
CMAKE_EXTRA="-D${pkgtype}_cache_from=${container_name}:latest_${CI_COMMIT_REF_SLUG}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cmake --version
|
|
||||||
test -d build && rm -rf build
|
|
||||||
mkdir -p build/container && cd build/container
|
|
||||||
eval time \
|
|
||||||
cmake -Dpackages_only=ON -DCMAKE_VERBOSE_MAKEFILE=ON ${CMAKE_EXTRA} \
|
|
||||||
-G Ninja ../..
|
|
||||||
time cmake --build . --target "${pkgtype}_container" -- -v
|
|
||||||
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
set -ex
|
|
||||||
pkgtype=$1
|
|
||||||
if [ "${pkgtype}" = "rpm" ] ; then
|
|
||||||
container_name="${RPM_CONTAINER_FULLNAME}"
|
|
||||||
container_tag="${RPM_CONTAINER_TAG}"
|
|
||||||
elif [ "${pkgtype}" = "dpkg" ] ; then
|
|
||||||
container_name="${DPKG_CONTAINER_FULLNAME}"
|
|
||||||
container_tag="${DPKG_CONTAINER_TAG}"
|
|
||||||
else
|
|
||||||
echo "invalid package type"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
time docker pull "${ARTIFACTORY_HUB}/${container_name}"
|
|
||||||
docker tag \
|
|
||||||
"${ARTIFACTORY_HUB}/${container_name}" \
|
|
||||||
"${container_name}"
|
|
||||||
docker images
|
|
||||||
test -d build && rm -rf build
|
|
||||||
mkdir -p build/${pkgtype} && cd build/${pkgtype}
|
|
||||||
time cmake \
|
|
||||||
-Dpackages_only=ON \
|
|
||||||
-Dcontainer_label="${container_tag}" \
|
|
||||||
-Dhave_package_container=ON \
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
|
||||||
-Dunity=OFF \
|
|
||||||
-G Ninja ../..
|
|
||||||
time cmake --build . --target ${pkgtype} -- -v
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
set -e
|
|
||||||
# used as a before/setup script for docker steps in gitlab-ci
|
|
||||||
# expects to be run in standard alpine/dind image
|
|
||||||
echo $(nproc)
|
|
||||||
docker login -u rippled \
|
|
||||||
-p ${ARTIFACTORY_DEPLOY_KEY_RIPPLED} ${ARTIFACTORY_HUB}
|
|
||||||
apk add --update py-pip
|
|
||||||
apk add \
|
|
||||||
bash util-linux coreutils binutils grep \
|
|
||||||
make ninja cmake build-base gcc g++ abuild git \
|
|
||||||
python3 python3-dev
|
|
||||||
pip3 install awscli
|
|
||||||
# list curdir contents to build log:
|
|
||||||
ls -la
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
case ${CI_COMMIT_REF_NAME} in
|
|
||||||
develop)
|
|
||||||
export COMPONENT="nightly"
|
|
||||||
;;
|
|
||||||
release)
|
|
||||||
export COMPONENT="unstable"
|
|
||||||
;;
|
|
||||||
master)
|
|
||||||
export COMPONENT="stable"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
export COMPONENT="_unknown_"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
@@ -1,771 +0,0 @@
|
|||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## gitlab CI defintition for rippled build containers and distro ##
|
|
||||||
## packages (rpm and dpkg). ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
# NOTE: these are sensible defaults for Ripple pipelines. These
|
|
||||||
# can be overridden by project or group variables as needed.
|
|
||||||
variables:
|
|
||||||
# these containers are built manually using the rippled
|
|
||||||
# cmake build (container targets) and tagged/pushed so they
|
|
||||||
# can be used here
|
|
||||||
RPM_CONTAINER_TAG: "2023-02-13"
|
|
||||||
RPM_CONTAINER_NAME: "rippled-rpm-builder"
|
|
||||||
RPM_CONTAINER_FULLNAME: "${RPM_CONTAINER_NAME}:${RPM_CONTAINER_TAG}"
|
|
||||||
DPKG_CONTAINER_TAG: "2023-07-31"
|
|
||||||
DPKG_CONTAINER_NAME: "rippled-dpkg-builder"
|
|
||||||
DPKG_CONTAINER_FULLNAME: "${DPKG_CONTAINER_NAME}:${DPKG_CONTAINER_TAG}"
|
|
||||||
ARTIFACTORY_HOST: "artifactory.ops.ripple.com"
|
|
||||||
ARTIFACTORY_HUB: "${ARTIFACTORY_HOST}:6555"
|
|
||||||
GIT_SIGN_PUBKEYS_URL: "https://gitlab.ops.ripple.com/xrpledger/rippled-packages/snippets/49/raw"
|
|
||||||
PUBLIC_REPO_ROOT: "https://repos.ripple.com/repos"
|
|
||||||
# also need to define this variable ONLY for the primary
|
|
||||||
# build/publish pipeline on the mainline repo:
|
|
||||||
# IS_PRIMARY_REPO = "true"
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- build_packages
|
|
||||||
- sign_packages
|
|
||||||
- smoketest
|
|
||||||
- verify_sig
|
|
||||||
- tag_images
|
|
||||||
- push_to_test
|
|
||||||
- verify_from_test
|
|
||||||
- wait_approval_prod
|
|
||||||
- push_to_prod
|
|
||||||
- verify_from_prod
|
|
||||||
- get_final_hashes
|
|
||||||
- build_containers
|
|
||||||
|
|
||||||
.dind_template: &dind_param
|
|
||||||
before_script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/docker_alpine_setup.sh
|
|
||||||
variables:
|
|
||||||
docker_driver: overlay2
|
|
||||||
DOCKER_TLS_CERTDIR: ""
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/docker:latest
|
|
||||||
services:
|
|
||||||
# workaround for TLS issues - consider going back
|
|
||||||
# back to unversioned `dind` when issues are resolved
|
|
||||||
- name: artifactory.ops.ripple.com/docker:stable-dind
|
|
||||||
alias: docker
|
|
||||||
tags:
|
|
||||||
- 4xlarge
|
|
||||||
|
|
||||||
.only_primary_template: &only_primary
|
|
||||||
only:
|
|
||||||
refs:
|
|
||||||
- /^(master|release|develop)$/
|
|
||||||
variables:
|
|
||||||
- $IS_PRIMARY_REPO == "true"
|
|
||||||
|
|
||||||
.smoketest_local_template: &run_local_smoketest
|
|
||||||
tags:
|
|
||||||
- xlarge
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/smoketest.sh local
|
|
||||||
|
|
||||||
.smoketest_repo_template: &run_repo_smoketest
|
|
||||||
tags:
|
|
||||||
- xlarge
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/smoketest.sh repo
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: build_packages ##
|
|
||||||
## ##
|
|
||||||
## build packages using containers from previous stage. ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
rpm_build:
|
|
||||||
timeout: "1h 30m"
|
|
||||||
stage: build_packages
|
|
||||||
<<: *dind_param
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- build/rpm/packages/
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/build_package.sh rpm
|
|
||||||
|
|
||||||
dpkg_build:
|
|
||||||
timeout: "1h 30m"
|
|
||||||
stage: build_packages
|
|
||||||
<<: *dind_param
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- build/dpkg/packages/
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/build_package.sh dpkg
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: sign_packages ##
|
|
||||||
## ##
|
|
||||||
## build packages using containers from previous stage. ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
rpm_sign:
|
|
||||||
stage: sign_packages
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/centos:7
|
|
||||||
<<: *only_primary
|
|
||||||
before_script:
|
|
||||||
- |
|
|
||||||
# Make sure GnuPG is installed
|
|
||||||
yum -y install gnupg rpm-sign
|
|
||||||
# checking GPG signing support
|
|
||||||
if [ -n "$GPG_KEY_B64" ]; then
|
|
||||||
echo "$GPG_KEY_B64"| base64 -d | gpg --batch --no-tty --allow-secret-key-import --import -
|
|
||||||
unset GPG_KEY_B64
|
|
||||||
export GPG_PASSPHRASE=$(echo $GPG_KEY_PASS_B64 | base64 -di)
|
|
||||||
unset GPG_KEY_PASS_B64
|
|
||||||
export GPG_KEYID=$(gpg --with-colon --list-secret-keys | head -n1 | cut -d : -f 5)
|
|
||||||
else
|
|
||||||
echo -e "\033[0;31m****** GPG signing disabled ******\033[0m"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- build/rpm/packages/
|
|
||||||
script:
|
|
||||||
- ls -alh build/rpm/packages
|
|
||||||
- . ./Builds/containers/gitlab-ci/sign_package.sh rpm
|
|
||||||
|
|
||||||
dpkg_sign:
|
|
||||||
stage: sign_packages
|
|
||||||
dependencies:
|
|
||||||
- dpkg_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:18.04
|
|
||||||
<<: *only_primary
|
|
||||||
before_script:
|
|
||||||
- |
|
|
||||||
# make sure we have GnuPG
|
|
||||||
apt update
|
|
||||||
apt install -y gpg dpkg-sig
|
|
||||||
# checking GPG signing support
|
|
||||||
if [ -n "$GPG_KEY_B64" ]; then
|
|
||||||
echo "$GPG_KEY_B64"| base64 -d | gpg --batch --no-tty --allow-secret-key-import --import -
|
|
||||||
unset GPG_KEY_B64
|
|
||||||
export GPG_PASSPHRASE=$(echo $GPG_KEY_PASS_B64 | base64 -di)
|
|
||||||
unset GPG_KEY_PASS_B64
|
|
||||||
export GPG_KEYID=$(gpg --with-colon --list-secret-keys | head -n1 | cut -d : -f 5)
|
|
||||||
else
|
|
||||||
echo -e "\033[0;31m****** GPG signing disabled ******\033[0m"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- build/dpkg/packages/
|
|
||||||
script:
|
|
||||||
- ls -alh build/dpkg/packages
|
|
||||||
- . ./Builds/containers/gitlab-ci/sign_package.sh dpkg
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: smoketest ##
|
|
||||||
## ##
|
|
||||||
## install unsigned packages from previous step and run unit tests. ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
centos_7_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/centos:7
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
rocky_8_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/rockylinux/rockylinux:8
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
rocky_9_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/rockylinux/rockylinux:9
|
|
||||||
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
alma_8_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/almalinux:8
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
alma_9_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/almalinux:9
|
|
||||||
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
fedora_38_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/fedora:38
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
fedora_39_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- rpm_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/fedora:39
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
ubuntu_18_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- dpkg_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:18.04
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
ubuntu_20_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- dpkg_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:20.04
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
ubuntu_22_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- dpkg_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:22.04
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
debian_10_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- dpkg_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:10
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
debian_11_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- dpkg_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:11
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
debian_12_smoketest:
|
|
||||||
stage: smoketest
|
|
||||||
dependencies:
|
|
||||||
- dpkg_build
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:12
|
|
||||||
<<: *run_local_smoketest
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: verify_sig ##
|
|
||||||
## ##
|
|
||||||
## use git/gpg to verify that HEAD is signed by an approved ##
|
|
||||||
## committer. The whitelist of pubkeys is manually mantained ##
|
|
||||||
## and fetched from GIT_SIGN_PUBKEYS_URL (currently a snippet ##
|
|
||||||
## link). ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
verify_head_signed:
|
|
||||||
stage: verify_sig
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:latest
|
|
||||||
<<: *only_primary
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/verify_head_commit.sh
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: tag_images ##
|
|
||||||
## ##
|
|
||||||
## apply rippled version tag to containers from previous stage. ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
tag_bld_images:
|
|
||||||
stage: tag_images
|
|
||||||
variables:
|
|
||||||
docker_driver: overlay2
|
|
||||||
DOCKER_TLS_CERTDIR: ""
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/docker:latest
|
|
||||||
services:
|
|
||||||
# workaround for TLS issues - consider going back
|
|
||||||
# back to unversioned `dind` when issues are resolved
|
|
||||||
- name: artifactory.ops.ripple.com/docker:stable-dind
|
|
||||||
alias: docker
|
|
||||||
tags:
|
|
||||||
- large
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/tag_docker_image.sh
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: push_to_test ##
|
|
||||||
## ##
|
|
||||||
## push packages to artifactory repositories (test) ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
push_test:
|
|
||||||
stage: push_to_test
|
|
||||||
variables:
|
|
||||||
DEB_REPO: "rippled-deb-test-mirror"
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/alpine:latest
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- files.info
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/push_to_artifactory.sh "PUT" "."
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: verify_from_test ##
|
|
||||||
## ##
|
|
||||||
## install/test packages from test repos. ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
centos_7_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/centos:7
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
rocky_8_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/rockylinux/rockylinux:8
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
rocky_9_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/rockylinux/rockylinux:9
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
almalinux_8_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/almalinux:8
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
almalinux_9_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/almalinux:9
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
fedora_38_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/fedora:38
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
fedora_39_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/fedora:39
|
|
||||||
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
ubuntu_18_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
DISTRO: "bionic"
|
|
||||||
DEB_REPO: "rippled-deb-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:18.04
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
ubuntu_20_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
DISTRO: "focal"
|
|
||||||
DEB_REPO: "rippled-deb-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:20.04
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
ubuntu_22_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
DISTRO: "jammy"
|
|
||||||
DEB_REPO: "rippled-deb-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:22.04
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
debian_10_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
DISTRO: "buster"
|
|
||||||
DEB_REPO: "rippled-deb-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:10
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
debian_11_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
DISTRO: "bullseye"
|
|
||||||
DEB_REPO: "rippled-deb-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:11
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
debian_12_verify_repo_test:
|
|
||||||
stage: verify_from_test
|
|
||||||
variables:
|
|
||||||
DISTRO: "bookworm"
|
|
||||||
DEB_REPO: "rippled-deb-test-mirror"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:12
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: wait_approval_prod ##
|
|
||||||
## ##
|
|
||||||
## wait for manual approval before proceeding to next stage ##
|
|
||||||
## which pushes to prod repo. ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
wait_before_push_prod:
|
|
||||||
stage: wait_approval_prod
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/alpine:latest
|
|
||||||
<<: *only_primary
|
|
||||||
script:
|
|
||||||
- echo "proceeding to next stage"
|
|
||||||
when: manual
|
|
||||||
allow_failure: false
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: push_to_prod ##
|
|
||||||
## ##
|
|
||||||
## push packages to artifactory repositories (prod) ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
push_prod:
|
|
||||||
variables:
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/alpine:latest
|
|
||||||
stage: push_to_prod
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- files.info
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/push_to_artifactory.sh "PUT" "."
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: verify_from_prod ##
|
|
||||||
## ##
|
|
||||||
## install/test packages from prod repos. ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
centos_7_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/centos:7
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
rocky_8_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/rockylinux/rockylinux:8
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
rocky_9_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/rockylinux/rockylinux:9
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
alma_8_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/almalinux:8
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
alma_9_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/almalinux:9
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
fedora_37_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/fedora:37
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
fedora_38_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/fedora:38
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
ubuntu_18_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
DISTRO: "bionic"
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:18.04
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
ubuntu_20_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
DISTRO: "focal"
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:20.04
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
ubuntu_22_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
DISTRO: "jammy"
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/ubuntu:22.04
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
debian_10_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
DISTRO: "buster"
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:10
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
debian_11_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
DISTRO: "bullseye"
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:11
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
debian_12_verify_repo_prod:
|
|
||||||
stage: verify_from_prod
|
|
||||||
variables:
|
|
||||||
DISTRO: "bookworm"
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/debian:12
|
|
||||||
dependencies:
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
<<: *run_repo_smoketest
|
|
||||||
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: get_final_hashes ##
|
|
||||||
## ##
|
|
||||||
## fetch final hashes from artifactory. ##
|
|
||||||
## ONLY RUNS FOR PRIMARY BRANCHES/REPO ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
get_prod_hashes:
|
|
||||||
variables:
|
|
||||||
DEB_REPO: "rippled-deb"
|
|
||||||
RPM_REPO: "rippled-rpm"
|
|
||||||
image:
|
|
||||||
name: artifactory.ops.ripple.com/alpine:latest
|
|
||||||
stage: get_final_hashes
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- files.info
|
|
||||||
dependencies:
|
|
||||||
- rpm_sign
|
|
||||||
- dpkg_sign
|
|
||||||
<<: *only_primary
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/push_to_artifactory.sh "GET" ".checksums"
|
|
||||||
|
|
||||||
#########################################################################
|
|
||||||
## ##
|
|
||||||
## stage: build_containers ##
|
|
||||||
## ##
|
|
||||||
## build containers from docker definitions. These containers are NOT ##
|
|
||||||
## used for the package build. This step is only used to ensure that ##
|
|
||||||
## the package build targets and files are still working properly. ##
|
|
||||||
## ##
|
|
||||||
#########################################################################
|
|
||||||
|
|
||||||
build_centos_container:
|
|
||||||
stage: build_containers
|
|
||||||
<<: *dind_param
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/build_container.sh rpm
|
|
||||||
|
|
||||||
build_ubuntu_container:
|
|
||||||
stage: build_containers
|
|
||||||
<<: *dind_param
|
|
||||||
script:
|
|
||||||
- . ./Builds/containers/gitlab-ci/build_container.sh dpkg
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
set -e
|
|
||||||
action=$1
|
|
||||||
filter=$2
|
|
||||||
|
|
||||||
. ./Builds/containers/gitlab-ci/get_component.sh
|
|
||||||
|
|
||||||
apk add curl jq coreutils util-linux
|
|
||||||
TOPDIR=$(pwd)
|
|
||||||
|
|
||||||
# DPKG
|
|
||||||
|
|
||||||
cd $TOPDIR
|
|
||||||
cd build/dpkg/packages
|
|
||||||
CURLARGS="-sk -X${action} -urippled:${ARTIFACTORY_DEPLOY_KEY_RIPPLED}"
|
|
||||||
RIPPLED_PKG=$(ls rippled_*.deb)
|
|
||||||
RIPPLED_REPORTING_PKG=$(ls rippled-reporting_*.deb)
|
|
||||||
RIPPLED_DBG_PKG=$(ls rippled-dbgsym_*.*deb)
|
|
||||||
RIPPLED_REPORTING_DBG_PKG=$(ls rippled-reporting-dbgsym_*.*deb)
|
|
||||||
# TODO - where to upload src tgz?
|
|
||||||
RIPPLED_SRC=$(ls rippled_*.orig.tar.gz)
|
|
||||||
DEB_MATRIX=";deb.component=${COMPONENT};deb.architecture=amd64"
|
|
||||||
for dist in bookworm buster bullseye bionic focal jammy; do
|
|
||||||
DEB_MATRIX="${DEB_MATRIX};deb.distribution=${dist}"
|
|
||||||
done
|
|
||||||
echo "{ \"debs\": {" > "${TOPDIR}/files.info"
|
|
||||||
for deb in ${RIPPLED_PKG} ${RIPPLED_DBG_PKG} ${RIPPLED_REPORTING_PKG} ${RIPPLED_REPORTING_DBG_PKG}; do
|
|
||||||
# first item doesn't get a comma separator
|
|
||||||
if [ $deb != $RIPPLED_PKG ] ; then
|
|
||||||
echo "," >> "${TOPDIR}/files.info"
|
|
||||||
fi
|
|
||||||
echo "\"${deb}\"": | tee -a "${TOPDIR}/files.info"
|
|
||||||
ca="${CURLARGS}"
|
|
||||||
if [ "${action}" = "PUT" ] ; then
|
|
||||||
url="https://${ARTIFACTORY_HOST}/artifactory/${DEB_REPO}/pool/${COMPONENT}/${deb}${DEB_MATRIX}"
|
|
||||||
ca="${ca} -T${deb}"
|
|
||||||
elif [ "${action}" = "GET" ] ; then
|
|
||||||
url="https://${ARTIFACTORY_HOST}/artifactory/api/storage/${DEB_REPO}/pool/${COMPONENT}/${deb}"
|
|
||||||
fi
|
|
||||||
echo "file info request url --> ${url}"
|
|
||||||
eval "curl ${ca} \"${url}\"" | jq -M "${filter}" | tee -a "${TOPDIR}/files.info"
|
|
||||||
done
|
|
||||||
echo "}," >> "${TOPDIR}/files.info"
|
|
||||||
|
|
||||||
# RPM
|
|
||||||
|
|
||||||
cd $TOPDIR
|
|
||||||
cd build/rpm/packages
|
|
||||||
RIPPLED_PKG=$(ls rippled-[0-9]*.x86_64.rpm)
|
|
||||||
RIPPLED_DEV_PKG=$(ls rippled-devel*.rpm)
|
|
||||||
RIPPLED_DBG_PKG=$(ls rippled-debuginfo*.rpm)
|
|
||||||
RIPPLED_REPORTING_PKG=$(ls rippled-reporting*.rpm)
|
|
||||||
# TODO - where to upload src rpm ?
|
|
||||||
RIPPLED_SRC=$(ls rippled-[0-9]*.src.rpm)
|
|
||||||
echo "\"rpms\": {" >> "${TOPDIR}/files.info"
|
|
||||||
for rpm in ${RIPPLED_PKG} ${RIPPLED_DEV_PKG} ${RIPPLED_DBG_PKG} ${RIPPLED_REPORTING_PKG}; do
|
|
||||||
# first item doesn't get a comma separator
|
|
||||||
if [ $rpm != $RIPPLED_PKG ] ; then
|
|
||||||
echo "," >> "${TOPDIR}/files.info"
|
|
||||||
fi
|
|
||||||
echo "\"${rpm}\"": | tee -a "${TOPDIR}/files.info"
|
|
||||||
ca="${CURLARGS}"
|
|
||||||
if [ "${action}" = "PUT" ] ; then
|
|
||||||
url="https://${ARTIFACTORY_HOST}/artifactory/${RPM_REPO}/${COMPONENT}/"
|
|
||||||
ca="${ca} -T${rpm}"
|
|
||||||
elif [ "${action}" = "GET" ] ; then
|
|
||||||
url="https://${ARTIFACTORY_HOST}/artifactory/api/storage/${RPM_REPO}/${COMPONENT}/${rpm}"
|
|
||||||
fi
|
|
||||||
echo "file info request url --> ${url}"
|
|
||||||
eval "curl ${ca} \"${url}\"" | jq -M "${filter}" | tee -a "${TOPDIR}/files.info"
|
|
||||||
done
|
|
||||||
echo "}}" >> "${TOPDIR}/files.info"
|
|
||||||
jq '.' "${TOPDIR}/files.info" > "${TOPDIR}/files.info.tmp"
|
|
||||||
mv "${TOPDIR}/files.info.tmp" "${TOPDIR}/files.info"
|
|
||||||
|
|
||||||
if [ ! -z "${SLACK_NOTIFY_URL}" ] && [ "${action}" = "GET" ] ; then
|
|
||||||
# extract files.info content to variable and sanitize so it can
|
|
||||||
# be interpolated into a slack text field below
|
|
||||||
finfo=$(cat ${TOPDIR}/files.info | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/\\n/g' | sed -E 's/"/\\"/g')
|
|
||||||
# try posting file info to slack.
|
|
||||||
# can add channel field to payload if the
|
|
||||||
# default channel is incorrect. Get rid of
|
|
||||||
# newlines in payload json since slack doesn't accept them
|
|
||||||
CONTENT=$(tr -d '[\n]' <<JSON
|
|
||||||
payload={
|
|
||||||
"username": "GitlabCI",
|
|
||||||
"text": "The package build for branch \`${CI_COMMIT_REF_NAME}\` is complete. File hashes are: \`\`\`${finfo}\`\`\`",
|
|
||||||
"icon_emoji": ":package:"}
|
|
||||||
JSON
|
|
||||||
)
|
|
||||||
curl ${SLACK_NOTIFY_URL} --data-urlencode "${CONTENT}"
|
|
||||||
fi
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eo pipefail
|
|
||||||
|
|
||||||
sign_dpkg() {
|
|
||||||
if [ -n "${GPG_KEYID}" ]; then
|
|
||||||
dpkg-sig \
|
|
||||||
-g "--no-tty --digest-algo 'sha512' --passphrase '${GPG_PASSPHRASE}' --pinentry-mode=loopback" \
|
|
||||||
-k "${GPG_KEYID}" \
|
|
||||||
--sign builder \
|
|
||||||
"build/dpkg/packages/*.deb"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
sign_rpm() {
|
|
||||||
if [ -n "${GPG_KEYID}" ] ; then
|
|
||||||
find build/rpm/packages -name "*.rpm" -exec bash -c '
|
|
||||||
echo "yes" | setsid rpm \
|
|
||||||
--define "_gpg_name ${GPG_KEYID}" \
|
|
||||||
--define "_signature gpg" \
|
|
||||||
--define "__gpg_check_password_cmd /bin/true" \
|
|
||||||
--define "__gpg_sign_cmd %{__gpg} gpg --batch --no-armor --digest-algo 'sha512' --passphrase '${GPG_PASSPHRASE}' --no-secmem-warning -u '%{_gpg_name}' --sign --detach-sign --output %{__signature_filename} %{__plaintext_filename}" \
|
|
||||||
--addsign '{} \;
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
case "${1}" in
|
|
||||||
dpkg)
|
|
||||||
sign_dpkg
|
|
||||||
;;
|
|
||||||
rpm)
|
|
||||||
sign_rpm
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Usage: ${0} (dpkg|rpm)"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
set -e
|
|
||||||
install_from=$1
|
|
||||||
use_private=${2:-0} # this option not currently needed by any CI scripts,
|
|
||||||
# reserved for possible future use
|
|
||||||
if [ "$use_private" -gt 0 ] ; then
|
|
||||||
REPO_ROOT="https://rippled:${ARTIFACTORY_DEPLOY_KEY_RIPPLED}@${ARTIFACTORY_HOST}/artifactory"
|
|
||||||
else
|
|
||||||
REPO_ROOT="${PUBLIC_REPO_ROOT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
. ./Builds/containers/gitlab-ci/get_component.sh
|
|
||||||
|
|
||||||
. /etc/os-release
|
|
||||||
case ${ID} in
|
|
||||||
ubuntu|debian)
|
|
||||||
pkgtype="dpkg"
|
|
||||||
;;
|
|
||||||
fedora|centos|rhel|scientific|rocky|almalinux)
|
|
||||||
pkgtype="rpm"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "unrecognized distro!"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# this script provides info variables about pkg version
|
|
||||||
. build/${pkgtype}/packages/build_vars
|
|
||||||
|
|
||||||
if [ "${pkgtype}" = "dpkg" ] ; then
|
|
||||||
# sometimes update fails and requires a cleanup
|
|
||||||
updateWithRetry()
|
|
||||||
{
|
|
||||||
if ! apt-get -y update ; then
|
|
||||||
rm -rvf /var/lib/apt/lists/*
|
|
||||||
apt-get -y clean
|
|
||||||
apt-get -y update
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
if [ "${install_from}" = "repo" ] ; then
|
|
||||||
apt-get -y upgrade
|
|
||||||
updateWithRetry
|
|
||||||
apt-get -y install apt apt-transport-https ca-certificates coreutils util-linux wget gnupg
|
|
||||||
wget -q -O - "${REPO_ROOT}/api/gpg/key/public" | apt-key add -
|
|
||||||
echo "deb ${REPO_ROOT}/${DEB_REPO} ${DISTRO} ${COMPONENT}" >> /etc/apt/sources.list
|
|
||||||
updateWithRetry
|
|
||||||
# uncomment this next line if you want to see the available package versions
|
|
||||||
# apt-cache policy rippled
|
|
||||||
apt-get -y install rippled=${dpkg_full_version}
|
|
||||||
elif [ "${install_from}" = "local" ] ; then
|
|
||||||
# cached pkg install
|
|
||||||
updateWithRetry
|
|
||||||
apt-get -y install libprotobuf-dev libprotoc-dev protobuf-compiler libssl-dev
|
|
||||||
rm -f build/dpkg/packages/rippled-dbgsym*.*
|
|
||||||
dpkg --no-debsig -i build/dpkg/packages/*.deb
|
|
||||||
else
|
|
||||||
echo "unrecognized pkg source!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
yum -y update
|
|
||||||
if [ "${install_from}" = "repo" ] ; then
|
|
||||||
pkgs=("yum-utils coreutils util-linux")
|
|
||||||
case "$ID" in
|
|
||||||
rocky|almalinux)
|
|
||||||
pkgs="${pkgs[@]/coreutils}"
|
|
||||||
esac
|
|
||||||
yum install -y $pkgs
|
|
||||||
REPOFILE="/etc/yum.repos.d/artifactory.repo"
|
|
||||||
echo "[Artifactory]" > ${REPOFILE}
|
|
||||||
echo "name=Artifactory" >> ${REPOFILE}
|
|
||||||
echo "baseurl=${REPO_ROOT}/${RPM_REPO}/${COMPONENT}/" >> ${REPOFILE}
|
|
||||||
echo "enabled=1" >> ${REPOFILE}
|
|
||||||
echo "gpgcheck=0" >> ${REPOFILE}
|
|
||||||
echo "gpgkey=${REPO_ROOT}/${RPM_REPO}/${COMPONENT}/repodata/repomd.xml.key" >> ${REPOFILE}
|
|
||||||
echo "repo_gpgcheck=1" >> ${REPOFILE}
|
|
||||||
yum -y update
|
|
||||||
# uncomment this next line if you want to see the available package versions
|
|
||||||
# yum --showduplicates list rippled
|
|
||||||
yum -y install ${rpm_version_release}
|
|
||||||
elif [ "${install_from}" = "local" ] ; then
|
|
||||||
rm -f build/rpm/packages/rippled-debug*.rpm
|
|
||||||
rm -f build/rpm/packages/rippled-devel*.rpm
|
|
||||||
rm -f build/rpm/packages/*.src.rpm
|
|
||||||
rpm -i build/rpm/packages/*.rpm
|
|
||||||
else
|
|
||||||
echo "unrecognized pkg source!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# verify installed version
|
|
||||||
INSTALLED=$(/opt/ripple/bin/rippled --version | awk '{print $NF}')
|
|
||||||
if [ "${rippled_version}" != "${INSTALLED}" ] ; then
|
|
||||||
echo "INSTALLED version ${INSTALLED} does not match ${rippled_version}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
# run unit tests
|
|
||||||
/opt/ripple/bin/rippled --unittest --unittest-jobs $(nproc)
|
|
||||||
/opt/ripple/bin/validator-keys --unittest
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
set -e
|
|
||||||
docker login -u rippled \
|
|
||||||
-p ${ARTIFACTORY_DEPLOY_KEY_RIPPLED} "${ARTIFACTORY_HUB}"
|
|
||||||
# this gives us rippled_version :
|
|
||||||
source build/rpm/packages/build_vars
|
|
||||||
docker pull "${ARTIFACTORY_HUB}/${RPM_CONTAINER_FULLNAME}"
|
|
||||||
docker pull "${ARTIFACTORY_HUB}/${DPKG_CONTAINER_FULLNAME}"
|
|
||||||
# tag/push two labels...one using the current rippled version and one just using "latest"
|
|
||||||
for label in ${rippled_version} latest ; do
|
|
||||||
docker tag \
|
|
||||||
"${ARTIFACTORY_HUB}/${RPM_CONTAINER_FULLNAME}" \
|
|
||||||
"${ARTIFACTORY_HUB}/${RPM_CONTAINER_NAME}:${label}_${CI_COMMIT_REF_SLUG}"
|
|
||||||
docker push \
|
|
||||||
"${ARTIFACTORY_HUB}/${RPM_CONTAINER_NAME}:${label}_${CI_COMMIT_REF_SLUG}"
|
|
||||||
docker tag \
|
|
||||||
"${ARTIFACTORY_HUB}/${DPKG_CONTAINER_FULLNAME}" \
|
|
||||||
"${ARTIFACTORY_HUB}/${DPKG_CONTAINER_NAME}:${label}_${CI_COMMIT_REF_SLUG}"
|
|
||||||
docker push \
|
|
||||||
"${ARTIFACTORY_HUB}/${DPKG_CONTAINER_NAME}:${label}_${CI_COMMIT_REF_SLUG}"
|
|
||||||
done
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
set -ex
|
|
||||||
apt -y update
|
|
||||||
DEBIAN_FRONTEND="noninteractive" apt-get -y install tzdata
|
|
||||||
apt -y install software-properties-common curl git gnupg
|
|
||||||
curl -sk -o rippled-pubkeys.txt "${GIT_SIGN_PUBKEYS_URL}"
|
|
||||||
gpg --import rippled-pubkeys.txt
|
|
||||||
if git verify-commit HEAD; then
|
|
||||||
echo "git commit signature check passed"
|
|
||||||
else
|
|
||||||
echo "git commit signature check failed"
|
|
||||||
git log -n 5 --color \
|
|
||||||
--pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an> [%G?]%Creset' \
|
|
||||||
--abbrev-commit
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
# make sure pkg source files are up to date with repo
|
|
||||||
cd /opt/rippled_bld/pkg
|
|
||||||
cp -fpru rippled/Builds/containers/packaging/dpkg/debian/. debian/
|
|
||||||
cp -fpu rippled/Builds/containers/shared/rippled*.service debian/
|
|
||||||
cp -fpu rippled/Builds/containers/shared/update_sources.sh .
|
|
||||||
source update_sources.sh
|
|
||||||
|
|
||||||
# Build the dpkg
|
|
||||||
|
|
||||||
#dpkg uses - as separator, so we need to change our -bN versions to tilde
|
|
||||||
RIPPLED_DPKG_VERSION=$(echo "${RIPPLED_VERSION}" | sed 's!-!~!g')
|
|
||||||
# TODO - decide how to handle the trailing/release
|
|
||||||
# version here (hardcoded to 1). Does it ever need to change?
|
|
||||||
RIPPLED_DPKG_FULL_VERSION="${RIPPLED_DPKG_VERSION}-1"
|
|
||||||
git config --global --add safe.directory /opt/rippled_bld/pkg/rippled
|
|
||||||
cd /opt/rippled_bld/pkg/rippled
|
|
||||||
if [[ -n $(git status --porcelain) ]]; then
|
|
||||||
git status
|
|
||||||
error "Unstaged changes in this repo - please commit first"
|
|
||||||
fi
|
|
||||||
git archive --format tar.gz --prefix rippled-${RIPPLED_DPKG_VERSION}/ -o ../rippled-${RIPPLED_DPKG_VERSION}.tar.gz HEAD
|
|
||||||
cd ..
|
|
||||||
# dpkg debmake would normally create this link, but we do it manually
|
|
||||||
ln -s ./rippled-${RIPPLED_DPKG_VERSION}.tar.gz rippled_${RIPPLED_DPKG_VERSION}.orig.tar.gz
|
|
||||||
tar xvf rippled-${RIPPLED_DPKG_VERSION}.tar.gz
|
|
||||||
cd rippled-${RIPPLED_DPKG_VERSION}
|
|
||||||
cp -pr ../debian .
|
|
||||||
|
|
||||||
# dpkg requires a changelog. We don't currently maintain
|
|
||||||
# a useable one, so let's just fake it with our current version
|
|
||||||
# TODO : not sure if the "unstable" will need to change for
|
|
||||||
# release packages (?)
|
|
||||||
NOWSTR=$(TZ=UTC date -R)
|
|
||||||
cat << CHANGELOG > ./debian/changelog
|
|
||||||
rippled (${RIPPLED_DPKG_FULL_VERSION}) unstable; urgency=low
|
|
||||||
|
|
||||||
* see RELEASENOTES
|
|
||||||
|
|
||||||
-- Ripple Labs Inc. <support@ripple.com> ${NOWSTR}
|
|
||||||
CHANGELOG
|
|
||||||
|
|
||||||
# PATH must be preserved for our more modern cmake in /opt/local
|
|
||||||
# TODO : consider allowing lintian to run in future ?
|
|
||||||
export DH_BUILD_DDEBS=1
|
|
||||||
debuild --no-lintian --preserve-envvar PATH --preserve-env -us -uc
|
|
||||||
rc=$?; if [[ $rc != 0 ]]; then
|
|
||||||
error "error building dpkg"
|
|
||||||
fi
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
# copy artifacts
|
|
||||||
cp rippled-reporting_${RIPPLED_DPKG_FULL_VERSION}_amd64.deb ${PKG_OUTDIR}
|
|
||||||
cp rippled_${RIPPLED_DPKG_FULL_VERSION}_amd64.deb ${PKG_OUTDIR}
|
|
||||||
cp rippled_${RIPPLED_DPKG_FULL_VERSION}.dsc ${PKG_OUTDIR}
|
|
||||||
# dbgsym suffix is ddeb under newer debuild, but just deb under earlier
|
|
||||||
cp rippled-dbgsym_${RIPPLED_DPKG_FULL_VERSION}_amd64.* ${PKG_OUTDIR}
|
|
||||||
cp rippled-reporting-dbgsym_${RIPPLED_DPKG_FULL_VERSION}_amd64.* ${PKG_OUTDIR}
|
|
||||||
cp rippled_${RIPPLED_DPKG_FULL_VERSION}_amd64.changes ${PKG_OUTDIR}
|
|
||||||
cp rippled_${RIPPLED_DPKG_FULL_VERSION}_amd64.build ${PKG_OUTDIR}
|
|
||||||
cp rippled_${RIPPLED_DPKG_VERSION}.orig.tar.gz ${PKG_OUTDIR}
|
|
||||||
cp rippled_${RIPPLED_DPKG_FULL_VERSION}.debian.tar.xz ${PKG_OUTDIR}
|
|
||||||
# buildinfo is only generated by later version of debuild
|
|
||||||
if [ -e rippled_${RIPPLED_DPKG_FULL_VERSION}_amd64.buildinfo ] ; then
|
|
||||||
cp rippled_${RIPPLED_DPKG_FULL_VERSION}_amd64.buildinfo ${PKG_OUTDIR}
|
|
||||||
fi
|
|
||||||
|
|
||||||
pushd ${PKG_OUTDIR}
|
|
||||||
for f in *.ddeb; do mv -- "$f" "${f%.ddeb}.deb"; done
|
|
||||||
popd
|
|
||||||
|
|
||||||
cat rippled_${RIPPLED_DPKG_FULL_VERSION}_amd64.changes
|
|
||||||
# extract the text in the .changes file that appears between
|
|
||||||
# Checksums-Sha256: ...
|
|
||||||
# and
|
|
||||||
# Files: ...
|
|
||||||
awk '/Checksums-Sha256:/{hit=1;next}/Files:/{hit=0}hit' \
|
|
||||||
rippled_${RIPPLED_DPKG_VERSION}-1_amd64.changes | \
|
|
||||||
sed -E 's!^[[:space:]]+!!' > shasums
|
|
||||||
DEB_SHA256=$(cat shasums | \
|
|
||||||
grep "rippled_${RIPPLED_DPKG_VERSION}-1_amd64.deb" | cut -d " " -f 1)
|
|
||||||
DBG_SHA256=$(cat shasums | \
|
|
||||||
grep "rippled-dbgsym_${RIPPLED_DPKG_VERSION}-1_amd64.*" | cut -d " " -f 1)
|
|
||||||
REPORTING_DBG_SHA256=$(cat shasums | \
|
|
||||||
grep "rippled-reporting-dbgsym_${RIPPLED_DPKG_VERSION}-1_amd64.*" | cut -d " " -f 1)
|
|
||||||
REPORTING_SHA256=$(cat shasums | \
|
|
||||||
grep "rippled-reporting_${RIPPLED_DPKG_VERSION}-1_amd64.deb" | cut -d " " -f 1)
|
|
||||||
SRC_SHA256=$(cat shasums | \
|
|
||||||
grep "rippled_${RIPPLED_DPKG_VERSION}.orig.tar.gz" | cut -d " " -f 1)
|
|
||||||
echo "deb_sha256=${DEB_SHA256}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "dbg_sha256=${DBG_SHA256}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "reporting_sha256=${REPORTING_SHA256}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "reporting_dbg_sha256=${REPORTING_DBG_SHA256}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "src_sha256=${SRC_SHA256}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rippled_version=${RIPPLED_VERSION}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "dpkg_version=${RIPPLED_DPKG_VERSION}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "dpkg_full_version=${RIPPLED_DPKG_FULL_VERSION}" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
rippled daemon
|
|
||||||
|
|
||||||
-- Mike Ellery <mellery451@gmail.com> Tue, 04 Dec 2018 18:19:03 +0000
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
10
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
Source: rippled
|
|
||||||
Section: misc
|
|
||||||
Priority: extra
|
|
||||||
Maintainer: Ripple Labs Inc. <support@ripple.com>
|
|
||||||
Build-Depends: cmake, debhelper (>=9), zlib1g-dev, dh-systemd, ninja-build
|
|
||||||
Standards-Version: 3.9.7
|
|
||||||
Homepage: http://ripple.com/
|
|
||||||
|
|
||||||
Package: rippled
|
|
||||||
Architecture: any
|
|
||||||
Multi-Arch: foreign
|
|
||||||
Depends: ${misc:Depends}, ${shlibs:Depends}
|
|
||||||
Description: rippled daemon
|
|
||||||
|
|
||||||
Package: rippled-reporting
|
|
||||||
Architecture: any
|
|
||||||
Multi-Arch: foreign
|
|
||||||
Depends: ${misc:Depends}, ${shlibs:Depends}
|
|
||||||
Description: rippled reporting daemon
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
|
||||||
Upstream-Name: rippled
|
|
||||||
Source: https://github.com/ripple/rippled
|
|
||||||
|
|
||||||
Files: *
|
|
||||||
Copyright: 2012-2019 Ripple Labs Inc.
|
|
||||||
|
|
||||||
License: __UNKNOWN__
|
|
||||||
|
|
||||||
The accompanying files under various copyrights.
|
|
||||||
|
|
||||||
Copyright (c) 2012, 2013, 2014 Ripple Labs Inc.
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
|
|
||||||
The accompanying files incorporate work covered by the following copyright
|
|
||||||
and previous license notice:
|
|
||||||
|
|
||||||
Copyright (c) 2011 Arthur Britto, David Schwartz, Jed McCaleb,
|
|
||||||
Vinnie Falco, Bob Way, Eric Lombrozo, Nikolaos D. Bougalis, Howard Hinnant
|
|
||||||
|
|
||||||
Some code from Raw Material Software, Ltd., provided under the terms of the
|
|
||||||
ISC License. See the corresponding source files for more details.
|
|
||||||
Copyright (c) 2013 - Raw Material Software Ltd.
|
|
||||||
Please visit http://www.juce.com
|
|
||||||
|
|
||||||
Some code from ASIO examples:
|
|
||||||
// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
|
||||||
//
|
|
||||||
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
||||||
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
Some code from Bitcoin:
|
|
||||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
||||||
// Copyright (c) 2011 The Bitcoin developers
|
|
||||||
// Distributed under the MIT/X11 software license, see the accompanying
|
|
||||||
// file license.txt or http://www.opensource.org/licenses/mit-license.php.
|
|
||||||
|
|
||||||
Some code from Tom Wu:
|
|
||||||
This software is covered under the following copyright:
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2003-2005 Tom Wu
|
|
||||||
* All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
* a copy of this software and associated documentation files (the
|
|
||||||
* "Software"), to deal in the Software without restriction, including
|
|
||||||
* without limitation the rights to use, copy, modify, merge, publish,
|
|
||||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
||||||
* permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
* the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be
|
|
||||||
* included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
|
||||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
*
|
|
||||||
* IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
|
|
||||||
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
|
|
||||||
* THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
|
|
||||||
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||||
*
|
|
||||||
* In addition, the following condition applies:
|
|
||||||
*
|
|
||||||
* All redistributions must retain an intact copy of this copyright notice
|
|
||||||
* and disclaimer.
|
|
||||||
*/
|
|
||||||
|
|
||||||
Address all questions regarding this license to:
|
|
||||||
|
|
||||||
Tom Wu
|
|
||||||
tjw@cs.Stanford.EDU
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
/var/log/rippled/
|
|
||||||
/var/lib/rippled/
|
|
||||||
/etc/systemd/system/rippled.service.d/
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
README.md
|
|
||||||
LICENSE.md
|
|
||||||
RELEASENOTES.md
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
opt/ripple/include
|
|
||||||
opt/ripple/lib/*.a
|
|
||||||
opt/ripple/lib/cmake/ripple
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
/var/log/rippled-reporting/
|
|
||||||
/var/lib/rippled-reporting/
|
|
||||||
/etc/systemd/system/rippled-reporting.service.d/
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
build.rippled-reporting/rippled-reporting opt/rippled-reporting/bin
|
|
||||||
cfg/rippled-reporting.cfg opt/rippled-reporting/etc
|
|
||||||
debian/tmp/opt/rippled-reporting/etc/validators.txt opt/rippled-reporting/etc
|
|
||||||
|
|
||||||
opt/rippled-reporting/bin/update-rippled-reporting.sh
|
|
||||||
opt/rippled-reporting/bin/getRippledReportingInfo
|
|
||||||
opt/rippled-reporting/etc/update-rippled-reporting-cron
|
|
||||||
etc/logrotate.d/rippled-reporting
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
opt/rippled-reporting/etc/rippled-reporting.cfg etc/opt/rippled-reporting/rippled-reporting.cfg
|
|
||||||
opt/rippled-reporting/etc/validators.txt etc/opt/rippled-reporting/validators.txt
|
|
||||||
opt/rippled-reporting/bin/rippled-reporting usr/local/bin/rippled-reporting
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
USER_NAME=rippled-reporting
|
|
||||||
GROUP_NAME=rippled-reporting
|
|
||||||
case "$1" in
|
|
||||||
configure)
|
|
||||||
id -u $USER_NAME >/dev/null 2>&1 || \
|
|
||||||
adduser --system --quiet \
|
|
||||||
--home /nonexistent --no-create-home \
|
|
||||||
--disabled-password \
|
|
||||||
--group "$GROUP_NAME"
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/log/rippled-reporting/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/lib/rippled-reporting/
|
|
||||||
chmod 755 /var/log/rippled-reporting/
|
|
||||||
chmod 755 /var/lib/rippled-reporting/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /opt/rippled-reporting
|
|
||||||
|
|
||||||
;;
|
|
||||||
|
|
||||||
abort-upgrade|abort-remove|abort-deconfigure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "postinst called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
/opt/ripple/etc/rippled.cfg
|
|
||||||
/opt/ripple/etc/validators.txt
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
opt/ripple/bin/rippled
|
|
||||||
opt/ripple/bin/validator-keys
|
|
||||||
opt/ripple/bin/update-rippled.sh
|
|
||||||
opt/ripple/bin/getRippledInfo
|
|
||||||
opt/ripple/etc/rippled.cfg
|
|
||||||
opt/ripple/etc/validators.txt
|
|
||||||
opt/ripple/etc/update-rippled-cron
|
|
||||||
etc/logrotate.d/rippled
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
opt/ripple/etc/rippled.cfg etc/opt/ripple/rippled.cfg
|
|
||||||
opt/ripple/etc/validators.txt etc/opt/ripple/validators.txt
|
|
||||||
opt/ripple/bin/rippled usr/local/bin/rippled
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
USER_NAME=rippled
|
|
||||||
GROUP_NAME=rippled
|
|
||||||
case "$1" in
|
|
||||||
configure)
|
|
||||||
id -u $USER_NAME >/dev/null 2>&1 || \
|
|
||||||
adduser --system --quiet \
|
|
||||||
--home /nonexistent --no-create-home \
|
|
||||||
--disabled-password \
|
|
||||||
--group "$GROUP_NAME"
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/log/rippled/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/lib/rippled/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /opt/ripple
|
|
||||||
chmod 755 /var/log/rippled/
|
|
||||||
chmod 755 /var/lib/rippled/
|
|
||||||
chmod 644 /opt/ripple/etc/update-rippled-cron
|
|
||||||
chmod 644 /etc/logrotate.d/rippled
|
|
||||||
chown -R root:$GROUP_NAME /opt/ripple/etc/update-rippled-cron
|
|
||||||
;;
|
|
||||||
|
|
||||||
abort-upgrade|abort-remove|abort-deconfigure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "postinst called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "postrm called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
install|upgrade)
|
|
||||||
;;
|
|
||||||
|
|
||||||
abort-upgrade)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "preinst called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
remove|upgrade|deconfigure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
failed-upgrade)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "prerm called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
#DEBHELPER#
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
export DH_VERBOSE = 1
|
|
||||||
export DH_OPTIONS = -v
|
|
||||||
# debuild sets some warnings that don't work well
|
|
||||||
# for our curent build..so try to remove those flags here:
|
|
||||||
export CFLAGS:=$(subst -Wformat,,$(CFLAGS))
|
|
||||||
export CFLAGS:=$(subst -Werror=format-security,,$(CFLAGS))
|
|
||||||
export CXXFLAGS:=$(subst -Wformat,,$(CXXFLAGS))
|
|
||||||
export CXXFLAGS:=$(subst -Werror=format-security,,$(CXXFLAGS))
|
|
||||||
|
|
||||||
%:
|
|
||||||
dh $@ --with systemd
|
|
||||||
|
|
||||||
override_dh_systemd_start:
|
|
||||||
dh_systemd_start --no-restart-on-upgrade
|
|
||||||
|
|
||||||
override_dh_auto_configure:
|
|
||||||
/root/.pyenv/shims/conan export external/snappy snappy/1.1.10@
|
|
||||||
/root/.pyenv/shims/conan export external/soci soci/4.0.3@
|
|
||||||
|
|
||||||
mkdir build.rippled
|
|
||||||
|
|
||||||
cd build.rippled && \
|
|
||||||
/root/.pyenv/shims/conan install .. \
|
|
||||||
--profile gcc \
|
|
||||||
--output-folder . \
|
|
||||||
--build missing \
|
|
||||||
--settings build_type=Release
|
|
||||||
|
|
||||||
cd build.rippled && \
|
|
||||||
cmake .. \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-Dvalidator_keys=ON \
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake
|
|
||||||
|
|
||||||
mkdir build.rippled-reporting
|
|
||||||
|
|
||||||
cd build.rippled-reporting && \
|
|
||||||
/root/.pyenv/shims/conan install .. \
|
|
||||||
--profile gcc \
|
|
||||||
--output-folder . \
|
|
||||||
--settings compiler.cppstd=17 \
|
|
||||||
--settings build_type=Release \
|
|
||||||
--build missing \
|
|
||||||
--build boost \
|
|
||||||
--build sqlite3 \
|
|
||||||
--build libuv \
|
|
||||||
--options reporting=True
|
|
||||||
|
|
||||||
cd build.rippled-reporting && \
|
|
||||||
cmake .. \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-Dvalidator_keys=ON \
|
|
||||||
-Dstatic=ON \
|
|
||||||
-Dunity=OFF \
|
|
||||||
-Dreporting=ON \
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake
|
|
||||||
|
|
||||||
override_dh_auto_build:
|
|
||||||
cmake --build build.rippled --target rippled --target validator-keys --parallel 8
|
|
||||||
cmake --build build.rippled-reporting --target rippled --parallel 8
|
|
||||||
|
|
||||||
override_dh_auto_install:
|
|
||||||
cmake --install build.rippled --prefix debian/tmp/opt/ripple
|
|
||||||
install -D build.rippled/validator-keys/validator-keys debian/tmp/opt/ripple/bin/validator-keys
|
|
||||||
install -D Builds/containers/shared/update-rippled.sh debian/tmp/opt/ripple/bin/update-rippled.sh
|
|
||||||
install -D bin/getRippledInfo debian/tmp/opt/ripple/bin/getRippledInfo
|
|
||||||
install -D Builds/containers/shared/update-rippled-cron debian/tmp/opt/ripple/etc/update-rippled-cron
|
|
||||||
install -D Builds/containers/shared/rippled-logrotate debian/tmp/etc/logrotate.d/rippled
|
|
||||||
rm -rf debian/tmp/opt/ripple/lib64/cmake/date
|
|
||||||
|
|
||||||
mkdir -p debian/tmp/opt/rippled-reporting/etc
|
|
||||||
mkdir -p debian/tmp/opt/rippled-reporting/bin
|
|
||||||
cp cfg/validators-example.txt debian/tmp/opt/rippled-reporting/etc/validators.txt
|
|
||||||
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' Builds/containers/shared/update-rippled.sh > debian/tmp/opt/rippled-reporting/bin/update-rippled-reporting.sh
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' bin/getRippledInfo > debian/tmp/opt/rippled-reporting/bin/getRippledReportingInfo
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' Builds/containers/shared/update-rippled-cron > debian/tmp/opt/rippled-reporting/etc/update-rippled-reporting-cron
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' Builds/containers/shared/rippled-logrotate > debian/tmp/etc/logrotate.d/rippled-reporting
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
3.0 (quilt)
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
#abort-on-upstream-changes
|
|
||||||
#unapply-patches
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
enable rippled-reporting.service
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
enable rippled.service
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
cd /opt/rippled_bld/pkg
|
|
||||||
cp -fpu rippled/Builds/containers/packaging/rpm/rippled.spec .
|
|
||||||
cp -fpu rippled/Builds/containers/shared/update_sources.sh .
|
|
||||||
source update_sources.sh
|
|
||||||
|
|
||||||
# Build the rpm
|
|
||||||
|
|
||||||
IFS='-' read -r RIPPLED_RPM_VERSION RELEASE <<< "$RIPPLED_VERSION"
|
|
||||||
export RIPPLED_RPM_VERSION
|
|
||||||
|
|
||||||
RPM_RELEASE=${RPM_RELEASE-1}
|
|
||||||
|
|
||||||
# post-release version
|
|
||||||
if [ "hf" = "$(echo "$RELEASE" | cut -c -2)" ]; then
|
|
||||||
RPM_RELEASE="${RPM_RELEASE}.${RELEASE}"
|
|
||||||
# pre-release version (-b or -rc)
|
|
||||||
elif [[ $RELEASE ]]; then
|
|
||||||
RPM_RELEASE="0.${RPM_RELEASE}.${RELEASE}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
export RPM_RELEASE
|
|
||||||
|
|
||||||
if [[ $RPM_PATCH ]]; then
|
|
||||||
RPM_PATCH=".${RPM_PATCH}"
|
|
||||||
export RPM_PATCH
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd /opt/rippled_bld/pkg/rippled
|
|
||||||
|
|
||||||
if [[ -n $(git status --porcelain) ]]; then
|
|
||||||
git status
|
|
||||||
error "Unstaged changes in this repo - please commit first"
|
|
||||||
fi
|
|
||||||
|
|
||||||
git archive --format tar.gz --prefix rippled/ -o ../rpmbuild/SOURCES/rippled.tar.gz HEAD
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
source /opt/rh/devtoolset-11/enable
|
|
||||||
|
|
||||||
rpmbuild --define "_topdir ${PWD}/rpmbuild" -ba rippled.spec
|
|
||||||
|
|
||||||
rc=$?; if [[ $rc != 0 ]]; then
|
|
||||||
error "error building rpm"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make a tar of the rpm and source rpm
|
|
||||||
RPM_VERSION_RELEASE=$(rpm -qp --qf='%{NAME}-%{VERSION}-%{RELEASE}' ./rpmbuild/RPMS/x86_64/rippled-[0-9]*.rpm)
|
|
||||||
tar_file=$RPM_VERSION_RELEASE.tar.gz
|
|
||||||
|
|
||||||
cp ./rpmbuild/RPMS/x86_64/* ${PKG_OUTDIR}
|
|
||||||
cp ./rpmbuild/SRPMS/* ${PKG_OUTDIR}
|
|
||||||
|
|
||||||
RPM_MD5SUM=$(rpm -q --queryformat '%{SIGMD5}\n' -p ./rpmbuild/RPMS/x86_64/rippled-[0-9]*.rpm 2>/dev/null)
|
|
||||||
DBG_MD5SUM=$(rpm -q --queryformat '%{SIGMD5}\n' -p ./rpmbuild/RPMS/x86_64/rippled-debuginfo*.rpm 2>/dev/null)
|
|
||||||
DEV_MD5SUM=$(rpm -q --queryformat '%{SIGMD5}\n' -p ./rpmbuild/RPMS/x86_64/rippled-devel*.rpm 2>/dev/null)
|
|
||||||
REP_MD5SUM=$(rpm -q --queryformat '%{SIGMD5}\n' -p ./rpmbuild/RPMS/x86_64/rippled-reporting*.rpm 2>/dev/null)
|
|
||||||
SRC_MD5SUM=$(rpm -q --queryformat '%{SIGMD5}\n' -p ./rpmbuild/SRPMS/*.rpm 2>/dev/null)
|
|
||||||
|
|
||||||
RPM_SHA256="$(sha256sum ./rpmbuild/RPMS/x86_64/rippled-[0-9]*.rpm | awk '{ print $1}')"
|
|
||||||
DBG_SHA256="$(sha256sum ./rpmbuild/RPMS/x86_64/rippled-debuginfo*.rpm | awk '{ print $1}')"
|
|
||||||
REP_SHA256="$(sha256sum ./rpmbuild/RPMS/x86_64/rippled-reporting*.rpm | awk '{ print $1}')"
|
|
||||||
DEV_SHA256="$(sha256sum ./rpmbuild/RPMS/x86_64/rippled-devel*.rpm | awk '{ print $1}')"
|
|
||||||
SRC_SHA256="$(sha256sum ./rpmbuild/SRPMS/*.rpm | awk '{ print $1}')"
|
|
||||||
|
|
||||||
echo "rpm_md5sum=$RPM_MD5SUM" > ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rep_md5sum=$REP_MD5SUM" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "dbg_md5sum=$DBG_MD5SUM" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "dev_md5sum=$DEV_MD5SUM" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "src_md5sum=$SRC_MD5SUM" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rpm_sha256=$RPM_SHA256" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rep_sha256=$REP_SHA256" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "dbg_sha256=$DBG_SHA256" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "dev_sha256=$DEV_SHA256" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "src_sha256=$SRC_SHA256" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rippled_version=$RIPPLED_VERSION" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rpm_version=$RIPPLED_RPM_VERSION" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rpm_file_name=$tar_file" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
echo "rpm_version_release=$RPM_VERSION_RELEASE" >> ${PKG_OUTDIR}/build_vars
|
|
||||||
@@ -1,239 +0,0 @@
|
|||||||
%define rippled_version %(echo $RIPPLED_RPM_VERSION)
|
|
||||||
%define rpm_release %(echo $RPM_RELEASE)
|
|
||||||
%define rpm_patch %(echo $RPM_PATCH)
|
|
||||||
%define _prefix /opt/ripple
|
|
||||||
|
|
||||||
Name: rippled
|
|
||||||
# Dashes in Version extensions must be converted to underscores
|
|
||||||
Version: %{rippled_version}
|
|
||||||
Release: %{rpm_release}%{?dist}%{rpm_patch}
|
|
||||||
Summary: rippled daemon
|
|
||||||
|
|
||||||
License: MIT
|
|
||||||
URL: http://ripple.com/
|
|
||||||
Source0: rippled.tar.gz
|
|
||||||
|
|
||||||
BuildRequires: cmake zlib-static ninja-build
|
|
||||||
|
|
||||||
%description
|
|
||||||
rippled
|
|
||||||
|
|
||||||
%package devel
|
|
||||||
Summary: Files for development of applications using xrpl core library
|
|
||||||
Group: Development/Libraries
|
|
||||||
Requires: zlib-static
|
|
||||||
|
|
||||||
%description devel
|
|
||||||
core library for development of standalone applications that sign transactions.
|
|
||||||
|
|
||||||
%package reporting
|
|
||||||
Summary: Reporting Server for rippled
|
|
||||||
|
|
||||||
%description reporting
|
|
||||||
History server for XRP Ledger
|
|
||||||
|
|
||||||
%prep
|
|
||||||
%setup -c -n rippled
|
|
||||||
|
|
||||||
%build
|
|
||||||
|
|
||||||
source /opt/rh/devtoolset-11/enable
|
|
||||||
source /opt/rh/rh-python38/enable
|
|
||||||
|
|
||||||
pip install "conan<2"
|
|
||||||
|
|
||||||
conan profile new default --detect
|
|
||||||
conan profile update settings.compiler.cppstd=20 default
|
|
||||||
conan profile update settings.compiler.libcxx=libstdc++11 default
|
|
||||||
|
|
||||||
cd rippled
|
|
||||||
|
|
||||||
conan export external/snappy snappy/1.1.10@
|
|
||||||
conan export external/soci soci/4.0.3@
|
|
||||||
|
|
||||||
mkdir -p bld.rippled
|
|
||||||
pushd bld.rippled
|
|
||||||
|
|
||||||
cp /opt/libcstd/libstdc++.so.6.0.22 /usr/lib64
|
|
||||||
cp /opt/libcstd/libstdc++.so.6.0.22 /lib64
|
|
||||||
ln -sf /usr/lib64/libstdc++.so.6.0.22 /usr/lib64/libstdc++.so.6
|
|
||||||
ln -sf /lib64/libstdc++.so.6.0.22 /usr/lib64/libstdc++.so.6
|
|
||||||
|
|
||||||
conan install .. \
|
|
||||||
--profile default \
|
|
||||||
--output-folder . \
|
|
||||||
--build missing \
|
|
||||||
--settings build_type=Release
|
|
||||||
|
|
||||||
cmake .. \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-Dvalidator_keys=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake
|
|
||||||
|
|
||||||
cmake --build . --parallel $(nproc) --target rippled --target validator-keys
|
|
||||||
|
|
||||||
popd
|
|
||||||
|
|
||||||
mkdir -p bld.rippled-reporting
|
|
||||||
pushd bld.rippled-reporting
|
|
||||||
|
|
||||||
conan install .. \
|
|
||||||
--settings build_type=Release \
|
|
||||||
--output-folder . \
|
|
||||||
--build missing \
|
|
||||||
--settings compiler.cppstd=17 \
|
|
||||||
--options reporting=True
|
|
||||||
|
|
||||||
cmake .. \
|
|
||||||
-G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=build/generators/conan_toolchain.cmake \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-Dunity=OFF \
|
|
||||||
-Dstatic=ON \
|
|
||||||
-Dvalidator_keys=ON \
|
|
||||||
-Dreporting=ON \
|
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=ON \
|
|
||||||
|
|
||||||
cmake --build . --parallel $(nproc) --target rippled
|
|
||||||
|
|
||||||
%pre
|
|
||||||
test -e /etc/pki/tls || { mkdir -p /etc/pki; ln -s /usr/lib/ssl /etc/pki/tls; }
|
|
||||||
|
|
||||||
%install
|
|
||||||
rm -rf $RPM_BUILD_ROOT
|
|
||||||
DESTDIR=$RPM_BUILD_ROOT cmake --build rippled/bld.rippled --target install #-- -v
|
|
||||||
mkdir -p $RPM_BUILD_ROOT
|
|
||||||
rm -rf ${RPM_BUILD_ROOT}%{_prefix}/lib64/
|
|
||||||
install -d ${RPM_BUILD_ROOT}/etc/opt/ripple
|
|
||||||
install -d ${RPM_BUILD_ROOT}/usr/local/bin
|
|
||||||
|
|
||||||
install -D ./rippled/cfg/rippled-example.cfg ${RPM_BUILD_ROOT}/%{_prefix}/etc/rippled.cfg
|
|
||||||
install -D ./rippled/cfg/validators-example.txt ${RPM_BUILD_ROOT}/%{_prefix}/etc/validators.txt
|
|
||||||
|
|
||||||
ln -sf %{_prefix}/etc/rippled.cfg ${RPM_BUILD_ROOT}/etc/opt/ripple/rippled.cfg
|
|
||||||
ln -sf %{_prefix}/etc/validators.txt ${RPM_BUILD_ROOT}/etc/opt/ripple/validators.txt
|
|
||||||
ln -sf %{_prefix}/bin/rippled ${RPM_BUILD_ROOT}/usr/local/bin/rippled
|
|
||||||
install -D rippled/bld.rippled/validator-keys/validator-keys ${RPM_BUILD_ROOT}%{_bindir}/validator-keys
|
|
||||||
install -D ./rippled/Builds/containers/shared/rippled.service ${RPM_BUILD_ROOT}/usr/lib/systemd/system/rippled.service
|
|
||||||
install -D ./rippled/Builds/containers/packaging/rpm/50-rippled.preset ${RPM_BUILD_ROOT}/usr/lib/systemd/system-preset/50-rippled.preset
|
|
||||||
install -D ./rippled/Builds/containers/shared/update-rippled.sh ${RPM_BUILD_ROOT}%{_bindir}/update-rippled.sh
|
|
||||||
install -D ./rippled/bin/getRippledInfo ${RPM_BUILD_ROOT}%{_bindir}/getRippledInfo
|
|
||||||
install -D ./rippled/Builds/containers/shared/update-rippled-cron ${RPM_BUILD_ROOT}%{_prefix}/etc/update-rippled-cron
|
|
||||||
install -D ./rippled/Builds/containers/shared/rippled-logrotate ${RPM_BUILD_ROOT}/etc/logrotate.d/rippled
|
|
||||||
install -d $RPM_BUILD_ROOT/var/log/rippled
|
|
||||||
install -d $RPM_BUILD_ROOT/var/lib/rippled
|
|
||||||
|
|
||||||
# reporting mode
|
|
||||||
%define _prefix /opt/rippled-reporting
|
|
||||||
mkdir -p ${RPM_BUILD_ROOT}/etc/opt/rippled-reporting/
|
|
||||||
install -D rippled/bld.rippled-reporting/rippled-reporting ${RPM_BUILD_ROOT}%{_bindir}/rippled-reporting
|
|
||||||
install -D ./rippled/cfg/rippled-reporting.cfg ${RPM_BUILD_ROOT}%{_prefix}/etc/rippled-reporting.cfg
|
|
||||||
install -D ./rippled/cfg/validators-example.txt ${RPM_BUILD_ROOT}%{_prefix}/etc/validators.txt
|
|
||||||
install -D ./rippled/Builds/containers/packaging/rpm/50-rippled-reporting.preset ${RPM_BUILD_ROOT}/usr/lib/systemd/system-preset/50-rippled-reporting.preset
|
|
||||||
ln -sf %{_prefix}/bin/rippled-reporting ${RPM_BUILD_ROOT}/usr/local/bin/rippled-reporting
|
|
||||||
ln -sf %{_prefix}/etc/rippled-reporting.cfg ${RPM_BUILD_ROOT}/etc/opt/rippled-reporting/rippled-reporting.cfg
|
|
||||||
ln -sf %{_prefix}/etc/validators.txt ${RPM_BUILD_ROOT}/etc/opt/rippled-reporting/validators.txt
|
|
||||||
install -d $RPM_BUILD_ROOT/var/log/rippled-reporting
|
|
||||||
install -d $RPM_BUILD_ROOT/var/lib/rippled-reporting
|
|
||||||
install -D ./rippled/Builds/containers/shared/rippled-reporting.service ${RPM_BUILD_ROOT}/usr/lib/systemd/system/rippled-reporting.service
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' ./rippled/Builds/containers/shared/update-rippled.sh > ${RPM_BUILD_ROOT}%{_bindir}/update-rippled-reporting.sh
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' ./rippled/bin/getRippledInfo > ${RPM_BUILD_ROOT}%{_bindir}/getRippledReportingInfo
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' ./rippled/Builds/containers/shared/update-rippled-cron > ${RPM_BUILD_ROOT}%{_prefix}/etc/update-rippled-reporting-cron
|
|
||||||
sed -E 's/rippled?/rippled-reporting/g' ./rippled/Builds/containers/shared/rippled-logrotate > ${RPM_BUILD_ROOT}/etc/logrotate.d/rippled-reporting
|
|
||||||
|
|
||||||
|
|
||||||
%post
|
|
||||||
%define _prefix /opt/ripple
|
|
||||||
USER_NAME=rippled
|
|
||||||
GROUP_NAME=rippled
|
|
||||||
|
|
||||||
getent passwd $USER_NAME &>/dev/null || useradd $USER_NAME
|
|
||||||
getent group $GROUP_NAME &>/dev/null || groupadd $GROUP_NAME
|
|
||||||
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/log/rippled/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/lib/rippled/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME %{_prefix}/
|
|
||||||
|
|
||||||
chmod 755 /var/log/rippled/
|
|
||||||
chmod 755 /var/lib/rippled/
|
|
||||||
|
|
||||||
chmod 644 %{_prefix}/etc/update-rippled-cron
|
|
||||||
chmod 644 /etc/logrotate.d/rippled
|
|
||||||
chown -R root:$GROUP_NAME %{_prefix}/etc/update-rippled-cron
|
|
||||||
|
|
||||||
%post reporting
|
|
||||||
%define _prefix /opt/rippled-reporting
|
|
||||||
USER_NAME=rippled-reporting
|
|
||||||
GROUP_NAME=rippled-reporting
|
|
||||||
|
|
||||||
getent passwd $USER_NAME &>/dev/null || useradd -r $USER_NAME
|
|
||||||
getent group $GROUP_NAME &>/dev/null || groupadd $GROUP_NAME
|
|
||||||
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/log/rippled-reporting/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME /var/lib/rippled-reporting/
|
|
||||||
chown -R $USER_NAME:$GROUP_NAME %{_prefix}/
|
|
||||||
|
|
||||||
chmod 755 /var/log/rippled-reporting/
|
|
||||||
chmod 755 /var/lib/rippled-reporting/
|
|
||||||
chmod -x /usr/lib/systemd/system/rippled-reporting.service
|
|
||||||
|
|
||||||
|
|
||||||
%files
|
|
||||||
%define _prefix /opt/ripple
|
|
||||||
%doc rippled/README.md rippled/LICENSE.md
|
|
||||||
%{_bindir}/rippled
|
|
||||||
/usr/local/bin/rippled
|
|
||||||
%{_bindir}/update-rippled.sh
|
|
||||||
%{_bindir}/getRippledInfo
|
|
||||||
%{_prefix}/etc/update-rippled-cron
|
|
||||||
%{_bindir}/validator-keys
|
|
||||||
%config(noreplace) %{_prefix}/etc/rippled.cfg
|
|
||||||
%config(noreplace) /etc/opt/ripple/rippled.cfg
|
|
||||||
%config(noreplace) %{_prefix}/etc/validators.txt
|
|
||||||
%config(noreplace) /etc/opt/ripple/validators.txt
|
|
||||||
%config(noreplace) /etc/logrotate.d/rippled
|
|
||||||
%config(noreplace) /usr/lib/systemd/system/rippled.service
|
|
||||||
%config(noreplace) /usr/lib/systemd/system-preset/50-rippled.preset
|
|
||||||
|
|
||||||
%dir /var/log/rippled/
|
|
||||||
%dir /var/lib/rippled/
|
|
||||||
|
|
||||||
%files devel
|
|
||||||
%{_prefix}/include
|
|
||||||
%{_prefix}/lib/*.a
|
|
||||||
%{_prefix}/lib/cmake/ripple
|
|
||||||
|
|
||||||
%files reporting
|
|
||||||
%define _prefix /opt/rippled-reporting
|
|
||||||
%doc rippled/README.md rippled/LICENSE.md
|
|
||||||
|
|
||||||
%{_bindir}/rippled-reporting
|
|
||||||
/usr/local/bin/rippled-reporting
|
|
||||||
%config(noreplace) /etc/opt/rippled-reporting/rippled-reporting.cfg
|
|
||||||
%config(noreplace) %{_prefix}/etc/rippled-reporting.cfg
|
|
||||||
%config(noreplace) %{_prefix}/etc/validators.txt
|
|
||||||
%config(noreplace) /etc/opt/rippled-reporting/validators.txt
|
|
||||||
%config(noreplace) /usr/lib/systemd/system/rippled-reporting.service
|
|
||||||
%config(noreplace) /usr/lib/systemd/system-preset/50-rippled-reporting.preset
|
|
||||||
%dir /var/log/rippled-reporting/
|
|
||||||
%dir /var/lib/rippled-reporting/
|
|
||||||
%{_bindir}/update-rippled-reporting.sh
|
|
||||||
%{_bindir}/getRippledReportingInfo
|
|
||||||
%{_prefix}/etc/update-rippled-reporting-cron
|
|
||||||
%config(noreplace) /etc/logrotate.d/rippled-reporting
|
|
||||||
|
|
||||||
%changelog
|
|
||||||
* Wed Aug 28 2019 Mike Ellery <mellery451@gmail.com>
|
|
||||||
- Switch to subproject build for validator-keys
|
|
||||||
|
|
||||||
* Wed May 15 2019 Mike Ellery <mellery451@gmail.com>
|
|
||||||
- Make validator-keys use local rippled build for core lib
|
|
||||||
|
|
||||||
* Wed Aug 01 2018 Mike Ellery <mellery451@gmail.com>
|
|
||||||
- add devel package for signing library
|
|
||||||
|
|
||||||
* Thu Jun 02 2016 Brandon Wilson <bwilson@ripple.com>
|
|
||||||
- Install validators.txt
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
IFS=. read cm_maj cm_min cm_rel <<<"$1"
|
|
||||||
: ${cm_rel:-0}
|
|
||||||
CMAKE_ROOT=${2:-"${HOME}/cmake"}
|
|
||||||
|
|
||||||
function cmake_version ()
|
|
||||||
{
|
|
||||||
if [[ -d ${CMAKE_ROOT} ]] ; then
|
|
||||||
local perms=$(test $(uname) = "Linux" && echo "/111" || echo "+111")
|
|
||||||
local installed=$(find ${CMAKE_ROOT} -perm ${perms} -type f -name cmake)
|
|
||||||
if [[ "${installed}" != "" ]] ; then
|
|
||||||
echo "$(${installed} --version | head -1)"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
installed=$(cmake_version)
|
|
||||||
if [[ "${installed}" != "" && ${installed} =~ ${cm_maj}.${cm_min}.${cm_rel} ]] ; then
|
|
||||||
echo "cmake already installed: ${installed}"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
# From CMake 20+ "Linux" is lowercase so using `uname` won't create be the correct path
|
|
||||||
if [ ${cm_min} -gt 19 ]; then
|
|
||||||
linux="linux"
|
|
||||||
else
|
|
||||||
linux=$(uname)
|
|
||||||
fi
|
|
||||||
pkgname="cmake-${cm_maj}.${cm_min}.${cm_rel}-${linux}-x86_64.tar.gz"
|
|
||||||
tmppkg="/tmp/cmake.tar.gz"
|
|
||||||
wget --quiet https://cmake.org/files/v${cm_maj}.${cm_min}/${pkgname} -O ${tmppkg}
|
|
||||||
mkdir -p ${CMAKE_ROOT}
|
|
||||||
cd ${CMAKE_ROOT}
|
|
||||||
tar --strip-components 1 -xf ${tmppkg}
|
|
||||||
rm -f ${tmppkg}
|
|
||||||
echo "installed: $(cmake_version)"
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
/var/log/rippled/*.log {
|
|
||||||
daily
|
|
||||||
minsize 200M
|
|
||||||
rotate 7
|
|
||||||
nocreate
|
|
||||||
missingok
|
|
||||||
notifempty
|
|
||||||
compress
|
|
||||||
compresscmd /usr/bin/nice
|
|
||||||
compressoptions -n19 ionice -c3 gzip
|
|
||||||
compressext .gz
|
|
||||||
postrotate
|
|
||||||
/opt/ripple/bin/rippled --conf /opt/ripple/etc/rippled.cfg logrotate
|
|
||||||
endscript
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=Ripple Daemon
|
|
||||||
After=network-online.target
|
|
||||||
Wants=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/opt/rippled-reporting/bin/rippled-reporting --silent --conf /etc/opt/rippled-reporting/rippled-reporting.cfg
|
|
||||||
Restart=on-failure
|
|
||||||
User=rippled-reporting
|
|
||||||
Group=rippled-reporting
|
|
||||||
LimitNOFILE=65536
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=Ripple Daemon
|
|
||||||
After=network-online.target
|
|
||||||
Wants=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/opt/ripple/bin/rippled --net --silent --conf /etc/opt/ripple/rippled.cfg
|
|
||||||
Restart=on-failure
|
|
||||||
User=rippled
|
|
||||||
Group=rippled
|
|
||||||
LimitNOFILE=65536
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# For automatic updates, symlink this file to /etc/cron.d/
|
|
||||||
# Do not remove the newline at the end of this cron script
|
|
||||||
|
|
||||||
# bash required for use of RANDOM below.
|
|
||||||
SHELL=/bin/bash
|
|
||||||
PATH=/sbin;/bin;/usr/sbin;/usr/bin
|
|
||||||
|
|
||||||
# invoke check/update script with random delay up to 59 mins
|
|
||||||
0 * * * * root sleep $((RANDOM*3540/32768)) && /opt/ripple/bin/update-rippled.sh
|
|
||||||
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# auto-update script for rippled daemon
|
|
||||||
|
|
||||||
# Check for sudo/root permissions
|
|
||||||
if [[ $(id -u) -ne 0 ]] ; then
|
|
||||||
echo "This update script must be run as root or sudo"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
LOCKDIR=/tmp/rippleupdate.lock
|
|
||||||
UPDATELOG=/var/log/rippled/update.log
|
|
||||||
|
|
||||||
function cleanup {
|
|
||||||
# If this directory isn't removed, future updates will fail.
|
|
||||||
rmdir $LOCKDIR
|
|
||||||
}
|
|
||||||
|
|
||||||
# Use mkdir to check if process is already running. mkdir is atomic, as against file create.
|
|
||||||
if ! mkdir $LOCKDIR 2>/dev/null; then
|
|
||||||
echo $(date -u) "lockdir exists - won't proceed." >> $UPDATELOG
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
trap cleanup EXIT
|
|
||||||
|
|
||||||
source /etc/os-release
|
|
||||||
can_update=false
|
|
||||||
|
|
||||||
if [[ "$ID" == "ubuntu" || "$ID" == "debian" ]] ; then
|
|
||||||
# Silent update
|
|
||||||
apt-get update -qq
|
|
||||||
|
|
||||||
# The next line is an "awk"ward way to check if the package needs to be updated.
|
|
||||||
RIPPLE=$(apt-get install -s --only-upgrade rippled | awk '/^Inst/ { print $2 }')
|
|
||||||
test "$RIPPLE" == "rippled" && can_update=true
|
|
||||||
|
|
||||||
function apply_update {
|
|
||||||
apt-get install rippled -qq
|
|
||||||
}
|
|
||||||
elif [[ "$ID" == "fedora" || "$ID" == "centos" || "$ID" == "rhel" || "$ID" == "scientific" ]] ; then
|
|
||||||
RIPPLE_REPO=${RIPPLE_REPO-stable}
|
|
||||||
yum --disablerepo=* --enablerepo=ripple-$RIPPLE_REPO clean expire-cache
|
|
||||||
|
|
||||||
yum check-update -q --enablerepo=ripple-$RIPPLE_REPO rippled || can_update=true
|
|
||||||
|
|
||||||
function apply_update {
|
|
||||||
yum update -y --enablerepo=ripple-$RIPPLE_REPO rippled
|
|
||||||
}
|
|
||||||
else
|
|
||||||
echo "unrecognized distro!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Do the actual update and restart the service after reloading systemctl daemon.
|
|
||||||
if [ "$can_update" = true ] ; then
|
|
||||||
exec 3>&1 1>>${UPDATELOG} 2>&1
|
|
||||||
set -e
|
|
||||||
apply_update
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl restart rippled.service
|
|
||||||
echo $(date -u) "rippled daemon updated."
|
|
||||||
else
|
|
||||||
echo $(date -u) "no updates available" >> $UPDATELOG
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
function error {
|
|
||||||
echo $1
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
cd /opt/rippled_bld/pkg/rippled
|
|
||||||
export RIPPLED_VERSION=$(egrep -i -o "\b(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9a-z\-]+(\.[0-9a-z\-]+)*)?(\+[0-9a-z\-]+(\.[0-9a-z\-]+)*)?\b" src/ripple/protocol/impl/BuildInfo.cpp)
|
|
||||||
|
|
||||||
: ${PKG_OUTDIR:=/opt/rippled_bld/pkg/out}
|
|
||||||
export PKG_OUTDIR
|
|
||||||
if [ ! -d ${PKG_OUTDIR} ]; then
|
|
||||||
error "${PKG_OUTDIR} is not mounted"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -x ${OPENSSL_ROOT}/bin/openssl ]; then
|
|
||||||
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${OPENSSL_ROOT}/lib ${OPENSSL_ROOT}/bin/openssl version -a
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
ARG DIST_TAG=18.04
|
|
||||||
FROM ubuntu:$DIST_TAG
|
|
||||||
ARG GIT_COMMIT=unknown
|
|
||||||
ARG CI_USE=false
|
|
||||||
LABEL git-commit=$GIT_COMMIT
|
|
||||||
|
|
||||||
WORKDIR /root
|
|
||||||
COPY ubuntu-builder/ubuntu_setup.sh .
|
|
||||||
COPY ubuntu-builder/ubuntu_setup2.sh .
|
|
||||||
|
|
||||||
RUN ./ubuntu_setup.sh && rm ubuntu_setup.sh
|
|
||||||
|
|
||||||
RUN ./ubuntu_setup2.sh && rm ubuntu_setup2.sh
|
|
||||||
|
|
||||||
COPY ubuntu-builder/ubuntu_setup3.sh .
|
|
||||||
RUN ./ubuntu_setup3.sh && rm ubuntu_setup3.sh
|
|
||||||
|
|
||||||
RUN mkdir -m 777 -p /opt/rippled_bld/pkg/
|
|
||||||
WORKDIR /opt/rippled_bld/pkg
|
|
||||||
|
|
||||||
COPY packaging/dpkg/build_dpkg.sh ./
|
|
||||||
CMD ./build_dpkg.sh
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
|
|
||||||
gcc_version=${GCC_VERSION:-11}
|
|
||||||
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
|
||||||
|
|
||||||
apt update
|
|
||||||
# Iteratively build the list of packages to install so that we can interleave
|
|
||||||
# the lines with comments explaining their inclusion.
|
|
||||||
dependencies=''
|
|
||||||
# - for add-apt-repository
|
|
||||||
dependencies+=' software-properties-common'
|
|
||||||
# - to download CMake
|
|
||||||
dependencies+=' curl'
|
|
||||||
# - to build CMake
|
|
||||||
dependencies+=' libssl-dev'
|
|
||||||
# - for Python
|
|
||||||
dependencies+=' libbz2-dev liblzma-dev libsqlite3-dev'
|
|
||||||
# - to download rippled
|
|
||||||
dependencies+=' git'
|
|
||||||
# - CMake generators (but not CMake itself)
|
|
||||||
dependencies+=' make ninja-build'
|
|
||||||
apt-get install --yes ${dependencies}
|
|
||||||
|
|
||||||
add-apt-repository --yes ppa:ubuntu-toolchain-r/test
|
|
||||||
apt-get install --yes gcc-${gcc_version} g++-${gcc_version}
|
|
||||||
apt-get install --yes build-essential libssl-dev zlib1g-dev \
|
|
||||||
libbz2-dev libreadline-dev libsqlite3-dev curl \
|
|
||||||
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
|
|
||||||
|
|
||||||
# Give us nice unversioned aliases for gcc and company.
|
|
||||||
update-alternatives --install \
|
|
||||||
/usr/bin/gcc gcc /usr/bin/gcc-${gcc_version} 100 \
|
|
||||||
--slave /usr/bin/g++ g++ /usr/bin/g++-${gcc_version} \
|
|
||||||
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-${gcc_version} \
|
|
||||||
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-${gcc_version} \
|
|
||||||
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-${gcc_version} \
|
|
||||||
--slave /usr/bin/gcov gcov /usr/bin/gcov-${gcc_version} \
|
|
||||||
--slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-dump-${gcc_version} \
|
|
||||||
--slave /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-tool-${gcc_version}
|
|
||||||
update-alternatives --auto gcc
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
# Parameters
|
|
||||||
|
|
||||||
gcc_version=${GCC_VERSION:-11}
|
|
||||||
cmake_version=${CMAKE_VERSION:-3.25.1}
|
|
||||||
cmake_sha256=1c511d09516af493694ed9baf13c55947a36389674d657a2d5e0ccedc6b291d8
|
|
||||||
conan_version=${CONAN_VERSION:-1.60}
|
|
||||||
|
|
||||||
curl https://pyenv.run | bash
|
|
||||||
export PYENV_ROOT="$HOME/.pyenv"
|
|
||||||
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
|
|
||||||
eval "$(pyenv init -)"
|
|
||||||
|
|
||||||
pyenv install 3.11.2
|
|
||||||
pyenv global 3.11.2
|
|
||||||
|
|
||||||
# Download and unpack CMake.
|
|
||||||
cmake_slug="cmake-${cmake_version}"
|
|
||||||
cmake_archive="${cmake_slug}.tar.gz"
|
|
||||||
curl --location --remote-name \
|
|
||||||
"https://github.com/Kitware/CMake/releases/download/v${cmake_version}/${cmake_archive}"
|
|
||||||
echo "${cmake_sha256} ${cmake_archive}" | sha256sum --check
|
|
||||||
tar -xzf ${cmake_archive}
|
|
||||||
rm ${cmake_archive}
|
|
||||||
|
|
||||||
# Build and install CMake.
|
|
||||||
cd ${cmake_slug}
|
|
||||||
./bootstrap --parallel=$(nproc)
|
|
||||||
make --jobs $(nproc)
|
|
||||||
make install
|
|
||||||
cd ..
|
|
||||||
rm --recursive --force ${cmake_slug}
|
|
||||||
|
|
||||||
# Install Conan.
|
|
||||||
pip install --upgrade pip
|
|
||||||
pip install conan==${conan_version}
|
|
||||||
|
|
||||||
conan profile new --detect gcc
|
|
||||||
conan profile update settings.compiler=gcc gcc
|
|
||||||
conan profile update settings.compiler.version=${gcc_version} gcc
|
|
||||||
conan profile update settings.compiler.libcxx=libstdc++11 gcc
|
|
||||||
conan profile update settings.compiler.cppstd=20 gcc
|
|
||||||
conan profile update env.CC=/usr/bin/gcc gcc
|
|
||||||
conan profile update env.CXX=/usr/bin/g++ gcc
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o xtrace
|
|
||||||
|
|
||||||
apt-get install --yes build-essential fakeroot devscripts cmake debhelper dh-systemd
|
|
||||||
@@ -13,12 +13,15 @@ then
|
|||||||
git clean -ix
|
git clean -ix
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Ensure all sorting is ASCII-order consistently across platforms.
|
||||||
|
export LANG=C
|
||||||
|
|
||||||
rm -rfv results
|
rm -rfv results
|
||||||
mkdir results
|
mkdir results
|
||||||
includes="$( pwd )/results/rawincludes.txt"
|
includes="$( pwd )/results/rawincludes.txt"
|
||||||
pushd ../..
|
pushd ../..
|
||||||
echo Raw includes:
|
echo Raw includes:
|
||||||
grep -r '#include.*/.*\.h' src/ripple/ src/test/ | \
|
grep -r '^[ ]*#include.*/.*\.h' include src | \
|
||||||
grep -v boost | tee ${includes}
|
grep -v boost | tee ${includes}
|
||||||
popd
|
popd
|
||||||
pushd results
|
pushd results
|
||||||
|
|||||||
@@ -1,51 +1,42 @@
|
|||||||
Loop: ripple.app ripple.core
|
|
||||||
ripple.app > ripple.core
|
|
||||||
|
|
||||||
Loop: ripple.app ripple.ledger
|
|
||||||
ripple.app > ripple.ledger
|
|
||||||
|
|
||||||
Loop: ripple.app ripple.net
|
|
||||||
ripple.app > ripple.net
|
|
||||||
|
|
||||||
Loop: ripple.app ripple.nodestore
|
|
||||||
ripple.app > ripple.nodestore
|
|
||||||
|
|
||||||
Loop: ripple.app ripple.overlay
|
|
||||||
ripple.overlay ~= ripple.app
|
|
||||||
|
|
||||||
Loop: ripple.app ripple.peerfinder
|
|
||||||
ripple.app > ripple.peerfinder
|
|
||||||
|
|
||||||
Loop: ripple.app ripple.rpc
|
|
||||||
ripple.rpc > ripple.app
|
|
||||||
|
|
||||||
Loop: ripple.app ripple.shamap
|
|
||||||
ripple.app > ripple.shamap
|
|
||||||
|
|
||||||
Loop: ripple.basics ripple.core
|
|
||||||
ripple.core > ripple.basics
|
|
||||||
|
|
||||||
Loop: ripple.basics ripple.json
|
|
||||||
ripple.json ~= ripple.basics
|
|
||||||
|
|
||||||
Loop: ripple.basics ripple.protocol
|
|
||||||
ripple.protocol > ripple.basics
|
|
||||||
|
|
||||||
Loop: ripple.core ripple.net
|
|
||||||
ripple.net > ripple.core
|
|
||||||
|
|
||||||
Loop: ripple.net ripple.rpc
|
|
||||||
ripple.rpc > ripple.net
|
|
||||||
|
|
||||||
Loop: ripple.nodestore ripple.overlay
|
|
||||||
ripple.overlay ~= ripple.nodestore
|
|
||||||
|
|
||||||
Loop: ripple.overlay ripple.rpc
|
|
||||||
ripple.rpc ~= ripple.overlay
|
|
||||||
|
|
||||||
Loop: test.jtx test.toplevel
|
Loop: test.jtx test.toplevel
|
||||||
test.toplevel > test.jtx
|
test.toplevel > test.jtx
|
||||||
|
|
||||||
Loop: test.jtx test.unit_test
|
Loop: test.jtx test.unit_test
|
||||||
test.unit_test == test.jtx
|
test.unit_test == test.jtx
|
||||||
|
|
||||||
|
Loop: xrpld.app xrpld.core
|
||||||
|
xrpld.app > xrpld.core
|
||||||
|
|
||||||
|
Loop: xrpld.app xrpld.ledger
|
||||||
|
xrpld.app > xrpld.ledger
|
||||||
|
|
||||||
|
Loop: xrpld.app xrpld.net
|
||||||
|
xrpld.app > xrpld.net
|
||||||
|
|
||||||
|
Loop: xrpld.app xrpld.overlay
|
||||||
|
xrpld.overlay > xrpld.app
|
||||||
|
|
||||||
|
Loop: xrpld.app xrpld.peerfinder
|
||||||
|
xrpld.peerfinder ~= xrpld.app
|
||||||
|
|
||||||
|
Loop: xrpld.app xrpld.rpc
|
||||||
|
xrpld.rpc > xrpld.app
|
||||||
|
|
||||||
|
Loop: xrpld.app xrpld.shamap
|
||||||
|
xrpld.app > xrpld.shamap
|
||||||
|
|
||||||
|
Loop: xrpld.core xrpld.net
|
||||||
|
xrpld.net > xrpld.core
|
||||||
|
|
||||||
|
Loop: xrpld.core xrpld.perflog
|
||||||
|
xrpld.perflog == xrpld.core
|
||||||
|
|
||||||
|
Loop: xrpld.net xrpld.rpc
|
||||||
|
xrpld.rpc ~= xrpld.net
|
||||||
|
|
||||||
|
Loop: xrpld.overlay xrpld.rpc
|
||||||
|
xrpld.rpc ~= xrpld.overlay
|
||||||
|
|
||||||
|
Loop: xrpld.perflog xrpld.rpc
|
||||||
|
xrpld.rpc ~= xrpld.perflog
|
||||||
|
|
||||||
|
|||||||
@@ -1,230 +1,196 @@
|
|||||||
ripple.app > ripple.basics
|
libxrpl.basics > xrpl.basics
|
||||||
ripple.app > ripple.beast
|
libxrpl.crypto > xrpl.basics
|
||||||
ripple.app > ripple.conditions
|
libxrpl.json > xrpl.basics
|
||||||
ripple.app > ripple.consensus
|
libxrpl.json > xrpl.json
|
||||||
ripple.app > ripple.crypto
|
libxrpl.protocol > xrpl.basics
|
||||||
ripple.app > ripple.json
|
libxrpl.protocol > xrpl.json
|
||||||
ripple.app > ripple.protocol
|
libxrpl.protocol > xrpl.protocol
|
||||||
ripple.app > ripple.resource
|
libxrpl.resource > xrpl.basics
|
||||||
ripple.app > test.unit_test
|
libxrpl.resource > xrpl.json
|
||||||
ripple.basics > ripple.beast
|
libxrpl.resource > xrpl.resource
|
||||||
ripple.conditions > ripple.basics
|
libxrpl.server > xrpl.basics
|
||||||
ripple.conditions > ripple.protocol
|
libxrpl.server > xrpl.json
|
||||||
ripple.consensus > ripple.basics
|
libxrpl.server > xrpl.protocol
|
||||||
ripple.consensus > ripple.beast
|
libxrpl.server > xrpl.server
|
||||||
ripple.consensus > ripple.json
|
|
||||||
ripple.consensus > ripple.protocol
|
|
||||||
ripple.core > ripple.beast
|
|
||||||
ripple.core > ripple.json
|
|
||||||
ripple.core > ripple.protocol
|
|
||||||
ripple.crypto > ripple.basics
|
|
||||||
ripple.json > ripple.beast
|
|
||||||
ripple.ledger > ripple.basics
|
|
||||||
ripple.ledger > ripple.beast
|
|
||||||
ripple.ledger > ripple.core
|
|
||||||
ripple.ledger > ripple.json
|
|
||||||
ripple.ledger > ripple.protocol
|
|
||||||
ripple.net > ripple.basics
|
|
||||||
ripple.net > ripple.beast
|
|
||||||
ripple.net > ripple.json
|
|
||||||
ripple.net > ripple.protocol
|
|
||||||
ripple.net > ripple.resource
|
|
||||||
ripple.nodestore > ripple.basics
|
|
||||||
ripple.nodestore > ripple.beast
|
|
||||||
ripple.nodestore > ripple.core
|
|
||||||
ripple.nodestore > ripple.json
|
|
||||||
ripple.nodestore > ripple.protocol
|
|
||||||
ripple.nodestore > ripple.unity
|
|
||||||
ripple.overlay > ripple.basics
|
|
||||||
ripple.overlay > ripple.beast
|
|
||||||
ripple.overlay > ripple.core
|
|
||||||
ripple.overlay > ripple.json
|
|
||||||
ripple.overlay > ripple.peerfinder
|
|
||||||
ripple.overlay > ripple.protocol
|
|
||||||
ripple.overlay > ripple.resource
|
|
||||||
ripple.overlay > ripple.server
|
|
||||||
ripple.peerfinder > ripple.basics
|
|
||||||
ripple.peerfinder > ripple.beast
|
|
||||||
ripple.peerfinder > ripple.core
|
|
||||||
ripple.peerfinder > ripple.protocol
|
|
||||||
ripple.perflog > ripple.basics
|
|
||||||
ripple.perflog > ripple.beast
|
|
||||||
ripple.perflog > ripple.core
|
|
||||||
ripple.perflog > ripple.json
|
|
||||||
ripple.perflog > ripple.nodestore
|
|
||||||
ripple.perflog > ripple.protocol
|
|
||||||
ripple.perflog > ripple.rpc
|
|
||||||
ripple.protocol > ripple.beast
|
|
||||||
ripple.protocol > ripple.crypto
|
|
||||||
ripple.protocol > ripple.json
|
|
||||||
ripple.resource > ripple.basics
|
|
||||||
ripple.resource > ripple.beast
|
|
||||||
ripple.resource > ripple.json
|
|
||||||
ripple.resource > ripple.protocol
|
|
||||||
ripple.rpc > ripple.basics
|
|
||||||
ripple.rpc > ripple.beast
|
|
||||||
ripple.rpc > ripple.core
|
|
||||||
ripple.rpc > ripple.crypto
|
|
||||||
ripple.rpc > ripple.json
|
|
||||||
ripple.rpc > ripple.ledger
|
|
||||||
ripple.rpc > ripple.nodestore
|
|
||||||
ripple.rpc > ripple.protocol
|
|
||||||
ripple.rpc > ripple.resource
|
|
||||||
ripple.rpc > ripple.server
|
|
||||||
ripple.rpc > ripple.shamap
|
|
||||||
ripple.server > ripple.basics
|
|
||||||
ripple.server > ripple.beast
|
|
||||||
ripple.server > ripple.crypto
|
|
||||||
ripple.server > ripple.json
|
|
||||||
ripple.server > ripple.protocol
|
|
||||||
ripple.shamap > ripple.basics
|
|
||||||
ripple.shamap > ripple.beast
|
|
||||||
ripple.shamap > ripple.crypto
|
|
||||||
ripple.shamap > ripple.nodestore
|
|
||||||
ripple.shamap > ripple.protocol
|
|
||||||
test.app > ripple.app
|
|
||||||
test.app > ripple.basics
|
|
||||||
test.app > ripple.beast
|
|
||||||
test.app > ripple.core
|
|
||||||
test.app > ripple.json
|
|
||||||
test.app > ripple.ledger
|
|
||||||
test.app > ripple.overlay
|
|
||||||
test.app > ripple.protocol
|
|
||||||
test.app > ripple.resource
|
|
||||||
test.app > ripple.rpc
|
|
||||||
test.app > test.jtx
|
test.app > test.jtx
|
||||||
test.app > test.rpc
|
test.app > test.rpc
|
||||||
test.app > test.toplevel
|
test.app > test.toplevel
|
||||||
test.app > test.unit_test
|
test.app > test.unit_test
|
||||||
test.basics > ripple.basics
|
test.app > xrpl.basics
|
||||||
test.basics > ripple.beast
|
test.app > xrpld.app
|
||||||
test.basics > ripple.json
|
test.app > xrpld.core
|
||||||
test.basics > ripple.protocol
|
test.app > xrpld.ledger
|
||||||
test.basics > ripple.rpc
|
test.app > xrpld.nodestore
|
||||||
|
test.app > xrpld.overlay
|
||||||
|
test.app > xrpld.rpc
|
||||||
|
test.app > xrpl.json
|
||||||
|
test.app > xrpl.protocol
|
||||||
|
test.app > xrpl.resource
|
||||||
test.basics > test.jtx
|
test.basics > test.jtx
|
||||||
test.basics > test.unit_test
|
test.basics > test.unit_test
|
||||||
test.beast > ripple.basics
|
test.basics > xrpl.basics
|
||||||
test.beast > ripple.beast
|
test.basics > xrpld.perflog
|
||||||
test.conditions > ripple.basics
|
test.basics > xrpld.rpc
|
||||||
test.conditions > ripple.beast
|
test.basics > xrpl.json
|
||||||
test.conditions > ripple.conditions
|
test.basics > xrpl.protocol
|
||||||
test.consensus > ripple.app
|
test.beast > xrpl.basics
|
||||||
test.consensus > ripple.basics
|
test.conditions > xrpl.basics
|
||||||
test.consensus > ripple.beast
|
test.conditions > xrpld.conditions
|
||||||
test.consensus > ripple.consensus
|
|
||||||
test.consensus > ripple.ledger
|
|
||||||
test.consensus > test.csf
|
test.consensus > test.csf
|
||||||
test.consensus > test.toplevel
|
test.consensus > test.toplevel
|
||||||
test.consensus > test.unit_test
|
test.consensus > test.unit_test
|
||||||
test.core > ripple.basics
|
test.consensus > xrpl.basics
|
||||||
test.core > ripple.beast
|
test.consensus > xrpld.app
|
||||||
test.core > ripple.core
|
test.consensus > xrpld.consensus
|
||||||
test.core > ripple.crypto
|
test.consensus > xrpld.ledger
|
||||||
test.core > ripple.json
|
test.consensus > xrpl.json
|
||||||
test.core > ripple.server
|
|
||||||
test.core > test.jtx
|
test.core > test.jtx
|
||||||
test.core > test.toplevel
|
test.core > test.toplevel
|
||||||
test.core > test.unit_test
|
test.core > test.unit_test
|
||||||
test.csf > ripple.basics
|
test.core > xrpl.basics
|
||||||
test.csf > ripple.beast
|
test.core > xrpld.core
|
||||||
test.csf > ripple.consensus
|
test.core > xrpld.perflog
|
||||||
test.csf > ripple.json
|
test.core > xrpl.json
|
||||||
test.csf > ripple.protocol
|
test.core > xrpl.server
|
||||||
test.json > ripple.beast
|
test.csf > xrpl.basics
|
||||||
test.json > ripple.json
|
test.csf > xrpld.consensus
|
||||||
test.json > ripple.rpc
|
test.csf > xrpl.json
|
||||||
|
test.csf > xrpl.protocol
|
||||||
test.json > test.jtx
|
test.json > test.jtx
|
||||||
test.jtx > ripple.app
|
test.json > xrpl.json
|
||||||
test.jtx > ripple.basics
|
test.jtx > xrpl.basics
|
||||||
test.jtx > ripple.beast
|
test.jtx > xrpld.app
|
||||||
test.jtx > ripple.consensus
|
test.jtx > xrpld.core
|
||||||
test.jtx > ripple.core
|
test.jtx > xrpld.ledger
|
||||||
test.jtx > ripple.json
|
test.jtx > xrpld.net
|
||||||
test.jtx > ripple.ledger
|
test.jtx > xrpld.rpc
|
||||||
test.jtx > ripple.net
|
test.jtx > xrpl.json
|
||||||
test.jtx > ripple.protocol
|
test.jtx > xrpl.protocol
|
||||||
test.jtx > ripple.resource
|
test.jtx > xrpl.resource
|
||||||
test.jtx > ripple.rpc
|
test.jtx > xrpl.server
|
||||||
test.jtx > ripple.server
|
|
||||||
test.ledger > ripple.app
|
|
||||||
test.ledger > ripple.basics
|
|
||||||
test.ledger > ripple.beast
|
|
||||||
test.ledger > ripple.core
|
|
||||||
test.ledger > ripple.ledger
|
|
||||||
test.ledger > ripple.protocol
|
|
||||||
test.ledger > test.jtx
|
test.ledger > test.jtx
|
||||||
test.ledger > test.toplevel
|
test.ledger > test.toplevel
|
||||||
test.net > ripple.net
|
test.ledger > xrpl.basics
|
||||||
test.net > test.jtx
|
test.ledger > xrpld.app
|
||||||
test.net > test.toplevel
|
test.ledger > xrpld.core
|
||||||
test.net > test.unit_test
|
test.ledger > xrpld.ledger
|
||||||
test.nodestore > ripple.app
|
test.ledger > xrpl.protocol
|
||||||
test.nodestore > ripple.basics
|
|
||||||
test.nodestore > ripple.beast
|
|
||||||
test.nodestore > ripple.core
|
|
||||||
test.nodestore > ripple.nodestore
|
|
||||||
test.nodestore > ripple.protocol
|
|
||||||
test.nodestore > ripple.unity
|
|
||||||
test.nodestore > test.jtx
|
test.nodestore > test.jtx
|
||||||
test.nodestore > test.toplevel
|
test.nodestore > test.toplevel
|
||||||
test.nodestore > test.unit_test
|
test.nodestore > test.unit_test
|
||||||
test.overlay > ripple.app
|
test.nodestore > xrpl.basics
|
||||||
test.overlay > ripple.basics
|
test.nodestore > xrpld.core
|
||||||
test.overlay > ripple.beast
|
test.nodestore > xrpld.nodestore
|
||||||
test.overlay > ripple.overlay
|
test.nodestore > xrpld.unity
|
||||||
test.overlay > ripple.peerfinder
|
|
||||||
test.overlay > ripple.protocol
|
|
||||||
test.overlay > ripple.shamap
|
|
||||||
test.overlay > test.jtx
|
test.overlay > test.jtx
|
||||||
|
test.overlay > test.toplevel
|
||||||
test.overlay > test.unit_test
|
test.overlay > test.unit_test
|
||||||
test.peerfinder > ripple.basics
|
test.overlay > xrpl.basics
|
||||||
test.peerfinder > ripple.beast
|
test.overlay > xrpld.app
|
||||||
test.peerfinder > ripple.core
|
test.overlay > xrpld.overlay
|
||||||
test.peerfinder > ripple.peerfinder
|
test.overlay > xrpld.peerfinder
|
||||||
test.peerfinder > ripple.protocol
|
test.overlay > xrpld.shamap
|
||||||
|
test.overlay > xrpl.protocol
|
||||||
test.peerfinder > test.beast
|
test.peerfinder > test.beast
|
||||||
test.peerfinder > test.unit_test
|
test.peerfinder > test.unit_test
|
||||||
test.protocol > ripple.basics
|
test.peerfinder > xrpl.basics
|
||||||
test.protocol > ripple.beast
|
test.peerfinder > xrpld.core
|
||||||
test.protocol > ripple.crypto
|
test.peerfinder > xrpld.peerfinder
|
||||||
test.protocol > ripple.json
|
test.peerfinder > xrpl.protocol
|
||||||
test.protocol > ripple.protocol
|
|
||||||
test.protocol > test.toplevel
|
test.protocol > test.toplevel
|
||||||
test.resource > ripple.basics
|
test.protocol > xrpl.basics
|
||||||
test.resource > ripple.beast
|
test.protocol > xrpl.json
|
||||||
test.resource > ripple.resource
|
test.protocol > xrpl.protocol
|
||||||
test.resource > test.unit_test
|
test.resource > test.unit_test
|
||||||
test.rpc > ripple.app
|
test.resource > xrpl.basics
|
||||||
test.rpc > ripple.basics
|
test.resource > xrpl.resource
|
||||||
test.rpc > ripple.beast
|
|
||||||
test.rpc > ripple.core
|
|
||||||
test.rpc > ripple.json
|
|
||||||
test.rpc > ripple.net
|
|
||||||
test.rpc > ripple.nodestore
|
|
||||||
test.rpc > ripple.overlay
|
|
||||||
test.rpc > ripple.protocol
|
|
||||||
test.rpc > ripple.resource
|
|
||||||
test.rpc > ripple.rpc
|
|
||||||
test.rpc > test.jtx
|
test.rpc > test.jtx
|
||||||
test.rpc > test.nodestore
|
|
||||||
test.rpc > test.toplevel
|
test.rpc > test.toplevel
|
||||||
test.server > ripple.app
|
test.rpc > xrpl.basics
|
||||||
test.server > ripple.basics
|
test.rpc > xrpld.app
|
||||||
test.server > ripple.beast
|
test.rpc > xrpld.core
|
||||||
test.server > ripple.core
|
test.rpc > xrpld.net
|
||||||
test.server > ripple.json
|
test.rpc > xrpld.overlay
|
||||||
test.server > ripple.rpc
|
test.rpc > xrpld.rpc
|
||||||
test.server > ripple.server
|
test.rpc > xrpl.json
|
||||||
|
test.rpc > xrpl.protocol
|
||||||
|
test.rpc > xrpl.resource
|
||||||
test.server > test.jtx
|
test.server > test.jtx
|
||||||
test.server > test.toplevel
|
test.server > test.toplevel
|
||||||
test.server > test.unit_test
|
test.server > test.unit_test
|
||||||
test.shamap > ripple.basics
|
test.server > xrpl.basics
|
||||||
test.shamap > ripple.beast
|
test.server > xrpld.app
|
||||||
test.shamap > ripple.nodestore
|
test.server > xrpld.core
|
||||||
test.shamap > ripple.protocol
|
test.server > xrpld.rpc
|
||||||
test.shamap > ripple.shamap
|
test.server > xrpl.json
|
||||||
|
test.server > xrpl.server
|
||||||
test.shamap > test.unit_test
|
test.shamap > test.unit_test
|
||||||
test.toplevel > ripple.json
|
test.shamap > xrpl.basics
|
||||||
|
test.shamap > xrpld.nodestore
|
||||||
|
test.shamap > xrpld.shamap
|
||||||
|
test.shamap > xrpl.protocol
|
||||||
test.toplevel > test.csf
|
test.toplevel > test.csf
|
||||||
test.unit_test > ripple.basics
|
test.toplevel > xrpl.json
|
||||||
test.unit_test > ripple.beast
|
test.unit_test > xrpl.basics
|
||||||
|
xrpl.json > xrpl.basics
|
||||||
|
xrpl.protocol > xrpl.basics
|
||||||
|
xrpl.protocol > xrpl.json
|
||||||
|
xrpl.resource > xrpl.basics
|
||||||
|
xrpl.resource > xrpl.json
|
||||||
|
xrpl.resource > xrpl.protocol
|
||||||
|
xrpl.server > xrpl.basics
|
||||||
|
xrpl.server > xrpl.json
|
||||||
|
xrpl.server > xrpl.protocol
|
||||||
|
xrpld.app > test.unit_test
|
||||||
|
xrpld.app > xrpl.basics
|
||||||
|
xrpld.app > xrpld.conditions
|
||||||
|
xrpld.app > xrpld.consensus
|
||||||
|
xrpld.app > xrpld.nodestore
|
||||||
|
xrpld.app > xrpld.perflog
|
||||||
|
xrpld.app > xrpl.json
|
||||||
|
xrpld.app > xrpl.protocol
|
||||||
|
xrpld.app > xrpl.resource
|
||||||
|
xrpld.conditions > xrpl.basics
|
||||||
|
xrpld.conditions > xrpl.protocol
|
||||||
|
xrpld.consensus > xrpl.basics
|
||||||
|
xrpld.consensus > xrpl.json
|
||||||
|
xrpld.consensus > xrpl.protocol
|
||||||
|
xrpld.core > xrpl.basics
|
||||||
|
xrpld.core > xrpl.json
|
||||||
|
xrpld.core > xrpl.protocol
|
||||||
|
xrpld.ledger > xrpl.basics
|
||||||
|
xrpld.ledger > xrpl.json
|
||||||
|
xrpld.ledger > xrpl.protocol
|
||||||
|
xrpld.net > xrpl.basics
|
||||||
|
xrpld.net > xrpl.json
|
||||||
|
xrpld.net > xrpl.protocol
|
||||||
|
xrpld.net > xrpl.resource
|
||||||
|
xrpld.nodestore > xrpl.basics
|
||||||
|
xrpld.nodestore > xrpld.core
|
||||||
|
xrpld.nodestore > xrpld.unity
|
||||||
|
xrpld.nodestore > xrpl.json
|
||||||
|
xrpld.nodestore > xrpl.protocol
|
||||||
|
xrpld.overlay > xrpl.basics
|
||||||
|
xrpld.overlay > xrpld.core
|
||||||
|
xrpld.overlay > xrpld.peerfinder
|
||||||
|
xrpld.overlay > xrpld.perflog
|
||||||
|
xrpld.overlay > xrpl.json
|
||||||
|
xrpld.overlay > xrpl.protocol
|
||||||
|
xrpld.overlay > xrpl.resource
|
||||||
|
xrpld.overlay > xrpl.server
|
||||||
|
xrpld.peerfinder > xrpl.basics
|
||||||
|
xrpld.peerfinder > xrpld.core
|
||||||
|
xrpld.peerfinder > xrpl.protocol
|
||||||
|
xrpld.perflog > xrpl.basics
|
||||||
|
xrpld.perflog > xrpl.json
|
||||||
|
xrpld.rpc > xrpl.basics
|
||||||
|
xrpld.rpc > xrpld.core
|
||||||
|
xrpld.rpc > xrpld.ledger
|
||||||
|
xrpld.rpc > xrpld.nodestore
|
||||||
|
xrpld.rpc > xrpl.json
|
||||||
|
xrpld.rpc > xrpl.protocol
|
||||||
|
xrpld.rpc > xrpl.resource
|
||||||
|
xrpld.rpc > xrpl.server
|
||||||
|
xrpld.shamap > xrpl.basics
|
||||||
|
xrpld.shamap > xrpld.nodestore
|
||||||
|
xrpld.shamap > xrpl.protocol
|
||||||
|
|||||||
@@ -9,23 +9,43 @@ endif()
|
|||||||
|
|
||||||
# Fix "unrecognized escape" issues when passing CMAKE_MODULE_PATH on Windows.
|
# Fix "unrecognized escape" issues when passing CMAKE_MODULE_PATH on Windows.
|
||||||
file(TO_CMAKE_PATH "${CMAKE_MODULE_PATH}" CMAKE_MODULE_PATH)
|
file(TO_CMAKE_PATH "${CMAKE_MODULE_PATH}" CMAKE_MODULE_PATH)
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/Builds/CMake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
project(rippled)
|
project(xrpl)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
# GCC-specific fixes
|
||||||
|
add_compile_options(-Wno-unknown-pragmas -Wno-subobject-linkage)
|
||||||
|
# -Wno-subobject-linkage can be removed when we upgrade GCC version to at least 13.3
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
# Clang-specific fixes
|
||||||
|
add_compile_options(-Wno-unknown-warning-option) # Ignore unknown warning options
|
||||||
|
elseif(MSVC)
|
||||||
|
# MSVC-specific fixes
|
||||||
|
add_compile_options(/wd4068) # Ignore unknown pragmas
|
||||||
|
endif()
|
||||||
|
|
||||||
# make GIT_COMMIT_HASH define available to all sources
|
# make GIT_COMMIT_HASH define available to all sources
|
||||||
find_package(Git)
|
find_package(Git)
|
||||||
if(Git_FOUND)
|
if(Git_FOUND)
|
||||||
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git describe --always --abbrev=40
|
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git rev-parse HEAD
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gch)
|
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gch)
|
||||||
if(gch)
|
if(gch)
|
||||||
set(GIT_COMMIT_HASH "${gch}")
|
set(GIT_COMMIT_HASH "${gch}")
|
||||||
message(STATUS gch: ${GIT_COMMIT_HASH})
|
message(STATUS gch: ${GIT_COMMIT_HASH})
|
||||||
add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
|
add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND ${GIT_EXECUTABLE} --git-dir=${CMAKE_CURRENT_SOURCE_DIR}/.git rev-parse --abbrev-ref HEAD
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE gb)
|
||||||
|
if(gb)
|
||||||
|
set(GIT_BRANCH "${gb}")
|
||||||
|
message(STATUS gb: ${GIT_BRANCH})
|
||||||
|
add_definitions(-DGIT_BRANCH="${GIT_BRANCH}")
|
||||||
|
endif()
|
||||||
endif() #git
|
endif() #git
|
||||||
|
|
||||||
if(thread_safety_analysis)
|
if(thread_safety_analysis)
|
||||||
@@ -38,7 +58,6 @@ include (CheckCXXCompilerFlag)
|
|||||||
include (FetchContent)
|
include (FetchContent)
|
||||||
include (ExternalProject)
|
include (ExternalProject)
|
||||||
include (CMakeFuncs) # must come *after* ExternalProject b/c it overrides one function in EP
|
include (CMakeFuncs) # must come *after* ExternalProject b/c it overrides one function in EP
|
||||||
include (ProcessorCount)
|
|
||||||
if (target)
|
if (target)
|
||||||
message (FATAL_ERROR "The target option has been removed - use native cmake options to control build")
|
message (FATAL_ERROR "The target option has been removed - use native cmake options to control build")
|
||||||
endif ()
|
endif ()
|
||||||
@@ -46,7 +65,6 @@ endif ()
|
|||||||
include(RippledSanity)
|
include(RippledSanity)
|
||||||
include(RippledVersion)
|
include(RippledVersion)
|
||||||
include(RippledSettings)
|
include(RippledSettings)
|
||||||
include(RippledRelease)
|
|
||||||
# this check has to remain in the top-level cmake
|
# this check has to remain in the top-level cmake
|
||||||
# because of the early return statement
|
# because of the early return statement
|
||||||
if (packages_only)
|
if (packages_only)
|
||||||
@@ -72,9 +90,11 @@ set_target_properties(OpenSSL::SSL PROPERTIES
|
|||||||
INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2
|
INTERFACE_COMPILE_DEFINITIONS OPENSSL_NO_SSL2
|
||||||
)
|
)
|
||||||
set(SECP256K1_INSTALL TRUE)
|
set(SECP256K1_INSTALL TRUE)
|
||||||
add_subdirectory(src/secp256k1)
|
add_subdirectory(external/secp256k1)
|
||||||
add_library(secp256k1::secp256k1 ALIAS secp256k1)
|
add_library(secp256k1::secp256k1 ALIAS secp256k1)
|
||||||
add_subdirectory(src/ed25519-donna)
|
add_subdirectory(external/ed25519-donna)
|
||||||
|
add_subdirectory(external/antithesis-sdk)
|
||||||
|
find_package(gRPC REQUIRED)
|
||||||
find_package(lz4 REQUIRED)
|
find_package(lz4 REQUIRED)
|
||||||
# Target names with :: are not allowed in a generator expression.
|
# Target names with :: are not allowed in a generator expression.
|
||||||
# We need to pull the include directories and imported location properties
|
# We need to pull the include directories and imported location properties
|
||||||
@@ -82,7 +102,6 @@ find_package(lz4 REQUIRED)
|
|||||||
find_package(LibArchive REQUIRED)
|
find_package(LibArchive REQUIRED)
|
||||||
find_package(SOCI REQUIRED)
|
find_package(SOCI REQUIRED)
|
||||||
find_package(SQLite3 REQUIRED)
|
find_package(SQLite3 REQUIRED)
|
||||||
find_package(Snappy REQUIRED)
|
|
||||||
|
|
||||||
option(rocksdb "Enable RocksDB" ON)
|
option(rocksdb "Enable RocksDB" ON)
|
||||||
if(rocksdb)
|
if(rocksdb)
|
||||||
@@ -95,10 +114,10 @@ endif()
|
|||||||
|
|
||||||
find_package(nudb REQUIRED)
|
find_package(nudb REQUIRED)
|
||||||
find_package(date REQUIRED)
|
find_package(date REQUIRED)
|
||||||
|
find_package(xxHash REQUIRED)
|
||||||
|
|
||||||
target_link_libraries(ripple_libs INTERFACE
|
target_link_libraries(ripple_libs INTERFACE
|
||||||
ed25519::ed25519
|
ed25519::ed25519
|
||||||
LibArchive::LibArchive
|
|
||||||
lz4::lz4
|
lz4::lz4
|
||||||
OpenSSL::Crypto
|
OpenSSL::Crypto
|
||||||
OpenSSL::SSL
|
OpenSSL::SSL
|
||||||
@@ -117,21 +136,11 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
target_link_libraries(ripple_libs INTERFACE ${nudb})
|
target_link_libraries(ripple_libs INTERFACE ${nudb})
|
||||||
|
|
||||||
if(reporting)
|
if(coverage)
|
||||||
find_package(cassandra-cpp-driver REQUIRED)
|
include(RippledCov)
|
||||||
find_package(PostgreSQL REQUIRED)
|
|
||||||
target_link_libraries(ripple_libs INTERFACE
|
|
||||||
cassandra-cpp-driver::cassandra-cpp-driver
|
|
||||||
PostgreSQL::PostgreSQL
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
###
|
set(PROJECT_EXPORT_SET RippleExports)
|
||||||
|
|
||||||
include(RippledCore)
|
include(RippledCore)
|
||||||
include(deps/Protobuf)
|
|
||||||
include(deps/gRPC)
|
|
||||||
include(RippledInstall)
|
include(RippledInstall)
|
||||||
include(RippledCov)
|
|
||||||
include(RippledMultiConfig)
|
|
||||||
include(RippledValidatorKeys)
|
include(RippledValidatorKeys)
|
||||||
|
|||||||
883
CONTRIBUTING.md
883
CONTRIBUTING.md
@@ -5,15 +5,12 @@ XRPL.
|
|||||||
# Contributing
|
# Contributing
|
||||||
|
|
||||||
We assume you are familiar with the general practice of [making
|
We assume you are familiar with the general practice of [making
|
||||||
contributions on GitHub][1]. This file includes only special
|
contributions on GitHub][contrib]. This file includes only special
|
||||||
instructions specific to this project.
|
instructions specific to this project.
|
||||||
|
|
||||||
|
|
||||||
## Before you start
|
## Before you start
|
||||||
|
|
||||||
In general, contributions should be developed in your personal
|
|
||||||
[fork](https://github.com/XRPLF/rippled/fork).
|
|
||||||
|
|
||||||
The following branches exist in the main project repository:
|
The following branches exist in the main project repository:
|
||||||
|
|
||||||
- `develop`: The latest set of unreleased features, and the most common
|
- `develop`: The latest set of unreleased features, and the most common
|
||||||
@@ -26,9 +23,20 @@ The tip of each branch must be signed. In order for GitHub to sign a
|
|||||||
squashed commit that it builds from your pull request, GitHub must know
|
squashed commit that it builds from your pull request, GitHub must know
|
||||||
your verifying key. Please set up [signature verification][signing].
|
your verifying key. Please set up [signature verification][signing].
|
||||||
|
|
||||||
[rippled]: https://github.com/XRPLF/rippled
|
In general, external contributions should be developed in your personal
|
||||||
[signing]:
|
[fork][forking]. Contributions from developers with write permissions
|
||||||
https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification
|
should be done in [the main repository][rippled] in a branch with
|
||||||
|
a permitted prefix. Permitted prefixes are:
|
||||||
|
* XLS-[a-zA-Z0-9]+/.+
|
||||||
|
* e.g. XLS-0033d/mpt-clarify-STEitherAmount
|
||||||
|
* [GitHub username]/.+
|
||||||
|
* e.g. JoelKatz/fix-rpc-webhook-queue
|
||||||
|
* [Organization name]/.+
|
||||||
|
* e.g. ripple/antithesis
|
||||||
|
|
||||||
|
Regardless of where the branch is created, please open a *draft* pull
|
||||||
|
request as soon as possible after pushing the branch to Github, to
|
||||||
|
increase visibility, and ease feedback during the development process.
|
||||||
|
|
||||||
|
|
||||||
## Major contributions
|
## Major contributions
|
||||||
@@ -49,6 +57,7 @@ author delegates that responsibility to others.
|
|||||||
|
|
||||||
|
|
||||||
## Before making a pull request
|
## Before making a pull request
|
||||||
|
(Or marking a draft pull request as ready.)
|
||||||
|
|
||||||
Changes that alter transaction processing must be guarded by an
|
Changes that alter transaction processing must be guarded by an
|
||||||
[Amendment](https://xrpl.org/amendments.html).
|
[Amendment](https://xrpl.org/amendments.html).
|
||||||
@@ -57,43 +66,141 @@ Amendment.
|
|||||||
|
|
||||||
Ensure that your code compiles according to the build instructions in
|
Ensure that your code compiles according to the build instructions in
|
||||||
[`BUILD.md`](./BUILD.md).
|
[`BUILD.md`](./BUILD.md).
|
||||||
If you create new source files, they must go under `src/ripple`.
|
|
||||||
You will need to add them to one of the
|
|
||||||
[source lists](./Builds/CMake/RippledCore.cmake) in CMake.
|
|
||||||
|
|
||||||
Please write tests for your code.
|
Please write tests for your code.
|
||||||
If you create new test source files, they must go under `src/test`.
|
|
||||||
You will need to add them to one of the
|
|
||||||
[source lists](./Builds/CMake/RippledCore.cmake) in CMake.
|
|
||||||
If your test can be run offline, in under 60 seconds, then it can be an
|
If your test can be run offline, in under 60 seconds, then it can be an
|
||||||
automatic test run by `rippled --unittest`.
|
automatic test run by `rippled --unittest`.
|
||||||
Otherwise, it must be a manual test.
|
Otherwise, it must be a manual test.
|
||||||
|
|
||||||
|
If you create new source files, they must be organized as follows:
|
||||||
|
* If the files are in any of the `libxrpl` modules, the headers (`.h`) must go
|
||||||
|
under `include/xrpl`, and source (`.cpp`) files must go under
|
||||||
|
`src/libxrpl`.
|
||||||
|
* All other non-test files must go under `src/xrpld`.
|
||||||
|
* All test source files must go under `src/test`.
|
||||||
|
|
||||||
The source must be formatted according to the style guide below.
|
The source must be formatted according to the style guide below.
|
||||||
|
|
||||||
Header includes must be [levelized](./Builds/levelization).
|
Header includes must be [levelized](./Builds/levelization).
|
||||||
|
|
||||||
|
Changes should be usually squashed down into a single commit.
|
||||||
|
Some larger or more complicated change sets make more sense,
|
||||||
|
and are easier to review if organized into multiple logical commits.
|
||||||
|
Either way, all commits should fit the following criteria:
|
||||||
|
* Changes should be presented in a single commit or a logical
|
||||||
|
sequence of commits.
|
||||||
|
Specifically, chronological commits that simply
|
||||||
|
reflect the history of how the author implemented
|
||||||
|
the change, "warts and all", are not useful to
|
||||||
|
reviewers.
|
||||||
|
* Every commit should have a [good message](#good-commit-messages).
|
||||||
|
to explain a specific aspects of the change.
|
||||||
|
* Every commit should be signed.
|
||||||
|
* Every commit should be well-formed (builds successfully,
|
||||||
|
unit tests passing), as this helps to resolve merge
|
||||||
|
conflicts, and makes it easier to use `git bisect`
|
||||||
|
to find bugs.
|
||||||
|
|
||||||
|
### Good commit messages
|
||||||
|
|
||||||
|
Refer to
|
||||||
|
["How to Write a Git Commit Message"](https://cbea.ms/git-commit/)
|
||||||
|
for general rules on writing a good commit message.
|
||||||
|
|
||||||
|
tl;dr
|
||||||
|
> 1. Separate subject from body with a blank line.
|
||||||
|
> 2. Limit the subject line to 50 characters.
|
||||||
|
> * [...]shoot for 50 characters, but consider 72 the hard limit.
|
||||||
|
> 3. Capitalize the subject line.
|
||||||
|
> 4. Do not end the subject line with a period.
|
||||||
|
> 5. Use the imperative mood in the subject line.
|
||||||
|
> * A properly formed Git commit subject line should always be able
|
||||||
|
> to complete the following sentence: "If applied, this commit will
|
||||||
|
> _your subject line here_".
|
||||||
|
> 6. Wrap the body at 72 characters.
|
||||||
|
> 7. Use the body to explain what and why vs. how.
|
||||||
|
|
||||||
|
In addition to those guidelines, please add one of the following
|
||||||
|
prefixes to the subject line if appropriate.
|
||||||
|
* `fix:` - The primary purpose is to fix an existing bug.
|
||||||
|
* `perf:` - The primary purpose is performance improvements.
|
||||||
|
* `refactor:` - The changes refactor code without affecting
|
||||||
|
functionality.
|
||||||
|
* `test:` - The changes _only_ affect unit tests.
|
||||||
|
* `docs:` - The changes _only_ affect documentation. This can
|
||||||
|
include code comments in addition to `.md` files like this one.
|
||||||
|
* `build:` - The changes _only_ affect the build process,
|
||||||
|
including CMake and/or Conan settings.
|
||||||
|
* `chore:` - Other tasks that don't affect the binary, but don't fit
|
||||||
|
any of the other cases. e.g. formatting, git settings, updating
|
||||||
|
Github Actions jobs.
|
||||||
|
|
||||||
|
Whenever possible, when updating commits after the PR is open, please
|
||||||
|
add the PR number to the end of the subject line. e.g. `test: Add
|
||||||
|
unit tests for Feature X (#1234)`.
|
||||||
|
|
||||||
## Pull requests
|
## Pull requests
|
||||||
|
|
||||||
In general, pull requests use `develop` as the base branch.
|
In general, pull requests use `develop` as the base branch.
|
||||||
|
The exceptions are
|
||||||
|
* Fixes and improvements to a release candidate use `release` as the
|
||||||
|
base.
|
||||||
|
* Hotfixes use `master` as the base.
|
||||||
|
|
||||||
(Hotfixes are an exception.)
|
If your changes are not quite ready, but you want to make it easily available
|
||||||
|
for preliminary examination or review, you can create a "Draft" pull request.
|
||||||
|
While a pull request is marked as a "Draft", you can rebase or reorganize the
|
||||||
|
commits in the pull request as desired.
|
||||||
|
|
||||||
Changes to pull requests must be added as new commits.
|
Github pull requests are created as "Ready" by default, or you can mark
|
||||||
Once code reviewers have started looking at your code, please avoid
|
a "Draft" pull request as "Ready".
|
||||||
force-pushing a branch in a pull request.
|
Once a pull request is marked as "Ready",
|
||||||
|
any changes must be added as new commits. Do not
|
||||||
|
force-push to a branch in a pull request under review.
|
||||||
|
(This includes rebasing your branch onto the updated base branch.
|
||||||
|
Use a merge operation, instead or hit the "Update branch" button
|
||||||
|
at the bottom of the Github PR page.)
|
||||||
This preserves the ability for reviewers to filter changes since their last
|
This preserves the ability for reviewers to filter changes since their last
|
||||||
review.
|
review.
|
||||||
|
|
||||||
A pull request must obtain **approvals from at least two reviewers** before it
|
A pull request must obtain **approvals from at least two reviewers**
|
||||||
can be considered for merge by a Maintainer.
|
before it can be considered for merge by a Maintainer.
|
||||||
Maintainers retain discretion to require more approvals if they feel the
|
Maintainers retain discretion to require more approvals if they feel the
|
||||||
credibility of the existing approvals is insufficient.
|
credibility of the existing approvals is insufficient.
|
||||||
|
|
||||||
Pull requests must be merged by [squash-and-merge][2]
|
Pull requests must be merged by [squash-and-merge][squash]
|
||||||
to preserve a linear history for the `develop` branch.
|
to preserve a linear history for the `develop` branch.
|
||||||
|
|
||||||
|
### "Ready to merge"
|
||||||
|
|
||||||
|
A pull request should only have the "Ready to merge" label added when it
|
||||||
|
meets a few criteria:
|
||||||
|
|
||||||
|
1. It must have two approving reviews [as described
|
||||||
|
above](#pull-requests). (Exception: PRs that are deemed "trivial"
|
||||||
|
only need one approval.)
|
||||||
|
2. All CI checks must be complete and passed. (One-off failures may
|
||||||
|
be acceptable if they are related to a known issue.)
|
||||||
|
3. The PR must have a [good commit message](#good-commit-messages).
|
||||||
|
* If the PR started with a good commit message, and it doesn't
|
||||||
|
need to be updated, the author can indicate that in a comment.
|
||||||
|
* Any contributor, preferably the author, can leave a comment
|
||||||
|
suggesting a commit message.
|
||||||
|
* If the author squashes and rebases the code in preparation for
|
||||||
|
merge, they should also ensure the commit message(s) are updated
|
||||||
|
as well.
|
||||||
|
4. The PR branch must be up to date with the base branch (usually
|
||||||
|
`develop`). This is usually accomplished by merging the base branch
|
||||||
|
into the feature branch, but if the other criteria are met, the
|
||||||
|
changes can be squashed and rebased on top of the base branch.
|
||||||
|
5. Finally, and most importantly, the author of the PR must
|
||||||
|
positively indicate that the PR is ready to merge. That can be
|
||||||
|
accomplished by adding the "Ready to merge" label if their role
|
||||||
|
allows, or by leaving a comment to the effect that the PR is ready to
|
||||||
|
merge.
|
||||||
|
|
||||||
|
Once the "Ready to merge" label is added, a maintainer may merge the PR
|
||||||
|
at any time, so don't use it lightly.
|
||||||
|
|
||||||
# Style guide
|
# Style guide
|
||||||
|
|
||||||
@@ -104,7 +211,7 @@ coherent rather than a set of _thou shalt not_ commandments.
|
|||||||
|
|
||||||
## Formatting
|
## Formatting
|
||||||
|
|
||||||
All code must conform to `clang-format` version 10,
|
All code must conform to `clang-format` version 18,
|
||||||
according to the settings in [`.clang-format`](./.clang-format),
|
according to the settings in [`.clang-format`](./.clang-format),
|
||||||
unless the result would be unreasonably difficult to read or maintain.
|
unless the result would be unreasonably difficult to read or maintain.
|
||||||
To demarcate lines that should be left as-is, surround them with comments like
|
To demarcate lines that should be left as-is, surround them with comments like
|
||||||
@@ -119,12 +226,103 @@ this:
|
|||||||
You can format individual files in place by running `clang-format -i <file>...`
|
You can format individual files in place by running `clang-format -i <file>...`
|
||||||
from any directory within this project.
|
from any directory within this project.
|
||||||
|
|
||||||
|
There is a Continuous Integration job that runs clang-format on pull requests. If the code doesn't comply, a patch file that corrects auto-fixable formatting issues is generated.
|
||||||
|
|
||||||
|
To download the patch file:
|
||||||
|
|
||||||
|
1. Next to `clang-format / check (pull_request) Failing after #s` -> click **Details** to open the details page.
|
||||||
|
2. Left menu -> click **Summary**
|
||||||
|
3. Scroll down to near the bottom-right under `Artifacts` -> click **clang-format.patch**
|
||||||
|
4. Download the zip file and extract it to your local git repository. Run `git apply [patch-file-name]`.
|
||||||
|
5. Commit and push.
|
||||||
|
|
||||||
You can install a pre-commit hook to automatically run `clang-format` before every commit:
|
You can install a pre-commit hook to automatically run `clang-format` before every commit:
|
||||||
```
|
```
|
||||||
pip3 install pre-commit
|
pip3 install pre-commit
|
||||||
pre-commit install
|
pre-commit install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Contracts and instrumentation
|
||||||
|
|
||||||
|
We are using [Antithesis](https://antithesis.com/) for continuous fuzzing,
|
||||||
|
and keep a copy of [Antithesis C++ SDK](https://github.com/antithesishq/antithesis-sdk-cpp/)
|
||||||
|
in `external/antithesis-sdk`. One of the aims of fuzzing is to identify bugs
|
||||||
|
by finding external conditions which cause contracts violations inside `rippled`.
|
||||||
|
The contracts are expressed as `XRPL_ASSERT` or `UNREACHABLE` (defined in
|
||||||
|
`include/xrpl/beast/utility/instrumentation.h`), which are effectively (outside
|
||||||
|
of Antithesis) wrappers for `assert(...)` with added name. The purpose of name
|
||||||
|
is to provide contracts with stable identity which does not rely on line numbers.
|
||||||
|
|
||||||
|
When `rippled` is built with the Antithesis instrumentation enabled
|
||||||
|
(using `voidstar` CMake option) and ran on the Antithesis platform, the
|
||||||
|
contracts become
|
||||||
|
[test properties](https://antithesis.com/docs/using_antithesis/properties.html);
|
||||||
|
otherwise they are just like a regular `assert`.
|
||||||
|
To learn more about Antithesis, see
|
||||||
|
[How Antithesis Works](https://antithesis.com/docs/introduction/how_antithesis_works.html)
|
||||||
|
and [C++ SDK](https://antithesis.com/docs/using_antithesis/sdk/cpp/overview.html#)
|
||||||
|
|
||||||
|
We continue to use the old style `assert` or `assert(false)` in certain
|
||||||
|
locations, where the reporting of contract violations on the Antithesis
|
||||||
|
platform is either not possible or not useful.
|
||||||
|
|
||||||
|
For this reason:
|
||||||
|
* The locations where `assert` or `assert(false)` contracts should continue to be used:
|
||||||
|
* `constexpr` functions
|
||||||
|
* unit tests i.e. files under `src/test`
|
||||||
|
* unit tests-related modules (files under `beast/test` and `beast/unit_test`)
|
||||||
|
* Outside of the listed locations, do not use `assert`; use `XRPL_ASSERT` instead,
|
||||||
|
giving it unique name, with the short description of the contract.
|
||||||
|
* Outside of the listed locations, do not use `assert(false)`; use
|
||||||
|
`UNREACHABLE` instead, giving it unique name, with the description of the
|
||||||
|
condition being violated
|
||||||
|
* The contract name should start with a full name (including scope) of the
|
||||||
|
function, optionally a named lambda, followed by a colon ` : ` and a brief
|
||||||
|
(typically at most five words) description. `UNREACHABLE` contracts
|
||||||
|
can use slightly longer descriptions. If there are multiple overloads of the
|
||||||
|
function, use common sense to balance both brevity and unambiguity of the
|
||||||
|
function name. NOTE: the purpose of name is to provide stable means of
|
||||||
|
unique identification of every contract; for this reason try to avoid elements
|
||||||
|
which can change in some obvious refactors or when reinforcing the condition.
|
||||||
|
* Contract description typically (except for `UNREACHABLE`) should describe the
|
||||||
|
_expected_ condition, as in "I assert that _expected_ is true".
|
||||||
|
* Contract description for `UNREACHABLE` should describe the _unexpected_
|
||||||
|
situation which caused the line to have been reached.
|
||||||
|
* Example good name for an
|
||||||
|
`UNREACHABLE` macro `"Json::operator==(Value, Value) : invalid type"`; example
|
||||||
|
good name for an `XRPL_ASSERT` macro `"Json::Value::asCString : valid type"`.
|
||||||
|
* Example **bad** name
|
||||||
|
`"RFC1751::insert(char* s, int x, int start, int length) : length is greater than or equal zero"`
|
||||||
|
(missing namespace, unnecessary full function signature, description too verbose).
|
||||||
|
Good name: `"ripple::RFC1751::insert : minimum length"`.
|
||||||
|
* In **few** well-justified cases a non-standard name can be used, in which case a
|
||||||
|
comment should be placed to explain the rationale (example in `contract.cpp`)
|
||||||
|
* Do **not** rename a contract without a good reason (e.g. the name no longer
|
||||||
|
reflects the location or the condition being checked)
|
||||||
|
* Do not use `std::unreachable`
|
||||||
|
* Do not put contracts where they can be violated by an external condition
|
||||||
|
(e.g. timing, data payload before mandatory validation etc.) as this creates
|
||||||
|
bogus bug reports (and causes crashes of Debug builds)
|
||||||
|
|
||||||
|
## Unit Tests
|
||||||
|
To execute all unit tests:
|
||||||
|
|
||||||
|
```rippled --unittest --unittest-jobs=<number of cores>```
|
||||||
|
|
||||||
|
(Note: Using multiple cores on a Mac M1 can cause spurious test failures. The
|
||||||
|
cause is still under investigation. If you observe this problem, try specifying fewer jobs.)
|
||||||
|
|
||||||
|
To run a specific set of test suites:
|
||||||
|
|
||||||
|
```
|
||||||
|
rippled --unittest TestSuiteName
|
||||||
|
```
|
||||||
|
Note: In this example, all tests with prefix `TestSuiteName` will be run, so if
|
||||||
|
`TestSuiteName1` and `TestSuiteName2` both exist, then both tests will run.
|
||||||
|
Alternatively, if the unit test name finds an exact match, it will stop
|
||||||
|
doing partial matches, i.e. if a unit test with a title of `TestSuiteName`
|
||||||
|
exists, then no other unit test will be executed, apart from `TestSuiteName`.
|
||||||
|
|
||||||
## Avoid
|
## Avoid
|
||||||
|
|
||||||
1. Proliferation of nearly identical code.
|
1. Proliferation of nearly identical code.
|
||||||
@@ -178,17 +376,646 @@ existing maintainer without a vote.
|
|||||||
|
|
||||||
## Current Maintainers
|
## Current Maintainers
|
||||||
|
|
||||||
|
Maintainers are users with maintain or admin access to the repo.
|
||||||
|
|
||||||
|
* [bthomee](https://github.com/bthomee) (Ripple)
|
||||||
|
* [intelliot](https://github.com/intelliot) (Ripple)
|
||||||
* [JoelKatz](https://github.com/JoelKatz) (Ripple)
|
* [JoelKatz](https://github.com/JoelKatz) (Ripple)
|
||||||
* [manojsdoshi](https://github.com/manojsdoshi) (Ripple)
|
|
||||||
* [n3tc4t](https://github.com/n3tc4t) (XRPL Labs)
|
|
||||||
* [Nik Bougalis](https://github.com/nbougalis)
|
|
||||||
* [nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
|
* [nixer89](https://github.com/nixer89) (XRP Ledger Foundation)
|
||||||
* [RichardAH](https://github.com/RichardAH) (XRPL Labs + XRP Ledger Foundation)
|
* [RichardAH](https://github.com/RichardAH) (XRP Ledger Foundation)
|
||||||
* [seelabs](https://github.com/seelabs) (Ripple)
|
|
||||||
* [Silkjaer](https://github.com/Silkjaer) (XRP Ledger Foundation)
|
* [Silkjaer](https://github.com/Silkjaer) (XRP Ledger Foundation)
|
||||||
* [WietseWind](https://github.com/WietseWind) (XRPL Labs + XRP Ledger Foundation)
|
* [WietseWind](https://github.com/WietseWind) (XRPL Labs + XRP Ledger Foundation)
|
||||||
|
* [ximinez](https://github.com/ximinez) (Ripple)
|
||||||
|
|
||||||
|
|
||||||
|
## Current Code Reviewers
|
||||||
|
|
||||||
|
Code Reviewers are developers who have the ability to review, approve, and
|
||||||
|
in some cases merge source code changes.
|
||||||
|
|
||||||
|
* [HowardHinnant](https://github.com/HowardHinnant) (Ripple)
|
||||||
|
* [scottschurr](https://github.com/scottschurr) (Ripple)
|
||||||
|
* [seelabs](https://github.com/seelabs) (Ripple)
|
||||||
* [Ed Hennis](https://github.com/ximinez) (Ripple)
|
* [Ed Hennis](https://github.com/ximinez) (Ripple)
|
||||||
|
* [mvadari](https://github.com/mvadari) (Ripple)
|
||||||
|
* [thejohnfreeman](https://github.com/thejohnfreeman) (Ripple)
|
||||||
|
* [Bronek](https://github.com/Bronek) (Ripple)
|
||||||
|
* [manojsdoshi](https://github.com/manojsdoshi) (Ripple)
|
||||||
|
* [godexsoft](https://github.com/godexsoft) (Ripple)
|
||||||
|
* [mDuo13](https://github.com/mDuo13) (Ripple)
|
||||||
|
* [ckniffen](https://github.com/ckniffen) (Ripple)
|
||||||
|
* [arihantkothari](https://github.com/arihantkothari) (Ripple)
|
||||||
|
* [pwang200](https://github.com/pwang200) (Ripple)
|
||||||
|
* [sophiax851](https://github.com/sophiax851) (Ripple)
|
||||||
|
* [shawnxie999](https://github.com/shawnxie999) (Ripple)
|
||||||
|
* [gregtatcam](https://github.com/gregtatcam) (Ripple)
|
||||||
|
* [mtrippled](https://github.com/mtrippled) (Ripple)
|
||||||
|
* [ckeshava](https://github.com/ckeshava) (Ripple)
|
||||||
|
* [nbougalis](https://github.com/nbougalis) None
|
||||||
|
* [RichardAH](https://github.com/RichardAH) (XRPL Labs + XRP Ledger Foundation)
|
||||||
|
* [dangell7](https://github.com/dangell7) (XRPL Labs)
|
||||||
|
|
||||||
|
Developers not on this list are able and encouraged to submit feedback
|
||||||
|
on pending code changes (open pull requests).
|
||||||
|
|
||||||
|
## Instructions for maintainers
|
||||||
|
|
||||||
|
These instructions assume you have your git upstream remotes configured
|
||||||
|
to avoid accidental pushes to the main repo, and a remote group
|
||||||
|
specifying both of them. e.g.
|
||||||
|
```
|
||||||
|
$ git remote -v | grep upstream
|
||||||
|
upstream https://github.com/XRPLF/rippled.git (fetch)
|
||||||
|
upstream https://github.com/XRPLF/rippled.git (push)
|
||||||
|
upstream-push git@github.com:XRPLF/rippled.git (fetch)
|
||||||
|
upstream-push git@github.com:XRPLF/rippled.git (push)
|
||||||
|
|
||||||
|
$ git config remotes.upstreams
|
||||||
|
upstream upstream-push
|
||||||
|
```
|
||||||
|
|
||||||
|
You can use the [setup-upstreams] script to set this up.
|
||||||
|
|
||||||
|
It also assumes you have a default gpg signing key set up in git. e.g.
|
||||||
|
```
|
||||||
|
$ git config user.signingkey
|
||||||
|
968479A1AFF927E37D1A566BB5690EEEBB952194
|
||||||
|
# (This is github's key. Use your own.)
|
||||||
|
```
|
||||||
|
|
||||||
|
### When and how to merge pull requests
|
||||||
|
|
||||||
|
The maintainer should double-check that the PR has met all the
|
||||||
|
necessary criteria, and can request additional information from the
|
||||||
|
owner, or additional reviews, and can always feel free to remove the
|
||||||
|
"Ready to merge" label if appropriate. The maintainer has final say on
|
||||||
|
whether a PR gets merged, and are encouraged to communicate and issues
|
||||||
|
or concerns to other maintainers.
|
||||||
|
|
||||||
|
#### Most pull requests: "Squash and merge"
|
||||||
|
|
||||||
|
Most pull requests don't need special handling, and can simply be
|
||||||
|
merged using the "Squash and merge" button on the Github UI. Update
|
||||||
|
the suggested commit message, or modify it as needed.
|
||||||
|
|
||||||
|
#### Slightly more complicated pull requests
|
||||||
|
|
||||||
|
Some pull requests need to be pushed to `develop` as more than one
|
||||||
|
commit. A PR author may *request* to merge as separate commits. They
|
||||||
|
must *justify* why separate commits are needed, and *specify* how they
|
||||||
|
would like the commits to be merged. If you disagree with the author,
|
||||||
|
discuss it with them directly.
|
||||||
|
|
||||||
|
If the process is reasonable, follow it. The simplest option is to do a
|
||||||
|
fast forward only merge (`--ff-only`) on the command line and push to
|
||||||
|
`develop`.
|
||||||
|
|
||||||
|
Some examples of when separate commits are worthwhile are:
|
||||||
|
1. PRs where source files are reorganized in multiple steps.
|
||||||
|
2. PRs where the commits are mostly independent and *could* be separate
|
||||||
|
PRs, but are pulled together into one PR under a commit theme or
|
||||||
|
issue.
|
||||||
|
3. PRs that are complicated enough that `git bisect` would not be much
|
||||||
|
help if it determined this PR introduced a problem.
|
||||||
|
|
||||||
|
Either way, check that:
|
||||||
|
* The commits are based on the current tip of `develop`.
|
||||||
|
* The commits are clean: No merge commits (except when reverse
|
||||||
|
merging), no "[FOLD]" or "fixup!" messages.
|
||||||
|
* All commits are signed. If the commits are not signed by the author, use
|
||||||
|
`git commit --amend -S` to sign them yourself.
|
||||||
|
* At least one (but preferably all) of the commits has the PR number
|
||||||
|
in the commit message.
|
||||||
|
|
||||||
|
The "Create a merge commit" and "Rebase and merge" options should be
|
||||||
|
disabled in the Github UI, but if you ever find them available **Do not
|
||||||
|
use them!**
|
||||||
|
|
||||||
|
### Releases
|
||||||
|
|
||||||
|
All releases, including release candidates and betas, are handled
|
||||||
|
differently from typical PRs. Most importantly, never use
|
||||||
|
the Github UI to merge a release.
|
||||||
|
|
||||||
|
Rippled uses a linear workflow model that can be summarized as:
|
||||||
|
|
||||||
|
1. In between releases, developers work against the `develop` branch.
|
||||||
|
2. Periodically, a maintainer will build and tag a beta version from
|
||||||
|
`develop`, which is pushed to `release`.
|
||||||
|
* Betas are usually released every two to three weeks, though that
|
||||||
|
schedule can vary depending on progress, availability, and other
|
||||||
|
factors.
|
||||||
|
3. When the changes in `develop` are considered stable and mature enough
|
||||||
|
to be ready to release, a release candidate (RC) is built and tagged
|
||||||
|
from `develop`, and merged to `release`.
|
||||||
|
* Further development for that release (primarily fixes) then
|
||||||
|
continues against `release`, while other development continues on
|
||||||
|
`develop`. Effectively, `release` is forked from `develop`. Changes
|
||||||
|
to `release` must be reverse merged to `develop`.
|
||||||
|
4. When the candidate has passed testing and is ready for release, the
|
||||||
|
final release is merged to `master`.
|
||||||
|
5. If any issues are found post-release, a hotfix / point release may be
|
||||||
|
created, which is merged to `master`, and then reverse merged to
|
||||||
|
`develop`.
|
||||||
|
|
||||||
|
#### Betas, and the first release candidate
|
||||||
|
|
||||||
|
##### Preparing the `develop` branch
|
||||||
|
|
||||||
|
1. Optimally, the `develop` branch will be ready to go, with all
|
||||||
|
relevant PRs already merged.
|
||||||
|
2. If there are any PRs pending, merge them **BEFORE** preparing the beta.
|
||||||
|
1. If only one or two PRs need to be merged, merge those PRs [as
|
||||||
|
normal](#when-and-how-to-merge-pull-requests), updating the second
|
||||||
|
one, and waiting for CI to finish in between.
|
||||||
|
2. If there are several pending PRs, do not use the Github UI,
|
||||||
|
because the delays waiting for CI in between each merge will be
|
||||||
|
unnecessarily onerous. (Incidentally, this process can also be
|
||||||
|
used to merge if the Github UI has issues.) Merge each PR branch
|
||||||
|
directly to a `release-next` on your local machine and create a single
|
||||||
|
PR, then push your branch to `develop`.
|
||||||
|
1. Squash the changes from each PR, one commit each (unless more
|
||||||
|
are needed), being sure to sign each commit and update the
|
||||||
|
commit message to include the PR number. You may be able to use
|
||||||
|
a fast-forward merge for the first PR.
|
||||||
|
2. Push your branch.
|
||||||
|
3. Continue to [Making the release](#making-the-release) to update
|
||||||
|
the version number, etc.
|
||||||
|
|
||||||
|
The workflow may look something like:
|
||||||
|
```
|
||||||
|
git fetch --multiple upstreams user1 user2 user3 [...]
|
||||||
|
git checkout -B release-next --no-track upstream/develop
|
||||||
|
|
||||||
|
# Only do an ff-only merge if prbranch1 is either already
|
||||||
|
# squashed, or needs to be merged with separate commits,
|
||||||
|
# and has no merge commits.
|
||||||
|
# Use -S on the ff-only merge if prbranch1 isn't signed.
|
||||||
|
git merge [-S] --ff-only user1/prbranch1
|
||||||
|
|
||||||
|
git merge --squash user2/prbranch2
|
||||||
|
git commit -S # Use the commit message provided on the PR
|
||||||
|
|
||||||
|
git merge --squash user3/prbranch3
|
||||||
|
git commit -S # Use the commit message provided on the PR
|
||||||
|
|
||||||
|
[...]
|
||||||
|
|
||||||
|
# Make sure the commits look right
|
||||||
|
git log --show-signature "upstream/develop..HEAD"
|
||||||
|
|
||||||
|
git push --set-upstream origin
|
||||||
|
|
||||||
|
# Continue to "Making the release" to update the version number, so
|
||||||
|
# everything can be done in one PR.
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also use the [squash-branches] script.
|
||||||
|
|
||||||
|
You may also need to manually close the open PRs after the changes are
|
||||||
|
merged to `develop`. Be sure to include the commit ID.
|
||||||
|
|
||||||
|
##### Making the release
|
||||||
|
|
||||||
|
This includes, betas, and the first release candidate (RC).
|
||||||
|
|
||||||
|
1. If you didn't create one [preparing the `develop`
|
||||||
|
branch](#preparing-the-develop-branch), Ensure there is no old
|
||||||
|
`release-next` branch hanging around. Then make a `release-next`
|
||||||
|
branch that only changes the version number. e.g.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
git checkout --no-track -B release-next upstream/develop
|
||||||
|
|
||||||
|
v="A.B.C-bD"
|
||||||
|
build=$( find -name BuildInfo.cpp )
|
||||||
|
sed 's/\(^.*versionString =\).*$/\1 "'${v}'"/' ${build} > version.cpp && mv -vi version.cpp ${build}
|
||||||
|
|
||||||
|
git diff
|
||||||
|
|
||||||
|
git add ${build}
|
||||||
|
|
||||||
|
git commit -S -m "Set version to ${v}"
|
||||||
|
|
||||||
|
# You could use your "origin" repo, but some CI tests work better on upstream.
|
||||||
|
git push upstream-push
|
||||||
|
git fetch upstreams
|
||||||
|
git branch --set-upstream-to=upstream/release-next
|
||||||
|
```
|
||||||
|
You can also use the [update-version] script.
|
||||||
|
2. Create a Pull Request for `release-next` with **`develop`** as
|
||||||
|
the base branch.
|
||||||
|
1. Use the title "[TRIVIAL] Set version to X.X.X-bX".
|
||||||
|
2. Instead of the default description template, use the following:
|
||||||
|
```
|
||||||
|
## High Level Overview of Change
|
||||||
|
|
||||||
|
This PR only changes the version number. It will be merged as
|
||||||
|
soon as Github CI actions successfully complete.
|
||||||
|
```
|
||||||
|
3. Wait for CI to successfully complete, and get someone to approve
|
||||||
|
the PR. (It is safe to ignore known CI issues.)
|
||||||
|
4. Push the updated `develop` branch using your `release-next`
|
||||||
|
branch. **Do not use the Github UI. It's important to preserve
|
||||||
|
commit IDs.**
|
||||||
|
```
|
||||||
|
git push upstream-push release-next:develop
|
||||||
|
```
|
||||||
|
5. In the unlikely event that the push fails because someone has merged
|
||||||
|
something else in the meantime, rebase your branch onto the updated
|
||||||
|
`develop` branch, push again, and go back to step 3.
|
||||||
|
6. Ensure that your PR against `develop` is closed. Github should do it
|
||||||
|
automatically.
|
||||||
|
7. Once this is done, forward progress on `develop` can continue
|
||||||
|
(other PRs may be merged).
|
||||||
|
8. Now create a Pull Request for `release-next` with **`release`** as
|
||||||
|
the base branch. Instead of the default template, reuse and update
|
||||||
|
the message from the previous release. Include the following verbiage
|
||||||
|
somewhere in the description:
|
||||||
|
```
|
||||||
|
The base branch is `release`. [All releases (including
|
||||||
|
betas)](https://github.com/XRPLF/rippled/blob/develop/CONTRIBUTING.md#before-you-start)
|
||||||
|
go in `release`. This PR branch will be pushed directly to `release` (not
|
||||||
|
squashed or rebased, and not using the GitHub UI).
|
||||||
|
```
|
||||||
|
7. Sign-offs for the three platforms (Linux, Mac, Windows) usually occur
|
||||||
|
offline, but at least one approval will be needed on the PR.
|
||||||
|
* If issues are discovered during testing, simply abandon the
|
||||||
|
release. It's easy to start a new release, it should be easy to
|
||||||
|
abandon one. **DO NOT REUSE THE VERSION NUMBER.** e.g. If you
|
||||||
|
abandon 2.4.0-b1, the next attempt will be 2.4.0-b2.
|
||||||
|
8. Once everything is ready to go, push to `release`.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
# Just to be safe, do a dry run first:
|
||||||
|
git push --dry-run upstream-push release-next:release
|
||||||
|
|
||||||
|
# If everything looks right, push the branch
|
||||||
|
git push upstream-push release-next:release
|
||||||
|
|
||||||
|
# Check that all of the branches are updated
|
||||||
|
git fetch upstreams
|
||||||
|
git log -1 --oneline
|
||||||
|
# The output should look like:
|
||||||
|
# 0123456789 (HEAD -> upstream/release-next, upstream/release,
|
||||||
|
# upstream/develop) Set version to 2.4.0-b1
|
||||||
|
# Note that upstream/develop may not be on this commit, but
|
||||||
|
# upstream/release must be.
|
||||||
|
# Other branches, including some from upstream-push, may also be
|
||||||
|
# present.
|
||||||
|
```
|
||||||
|
9. Tag the release, too.
|
||||||
|
```
|
||||||
|
git tag <version number>
|
||||||
|
git push upstream-push <version number>
|
||||||
|
```
|
||||||
|
10. Delete the `release-next` branch on the repo. Use the Github UI or:
|
||||||
|
```
|
||||||
|
git push --delete upstream-push release-next
|
||||||
|
```
|
||||||
|
11. Finally [create a new release on
|
||||||
|
Github](https://github.com/XRPLF/rippled/releases).
|
||||||
|
|
||||||
|
#### Release candidates after the first
|
||||||
|
|
||||||
|
Once the first release candidate is [merged into
|
||||||
|
release](#making-the-release), then `release` and `develop` *are allowed
|
||||||
|
to diverge*.
|
||||||
|
|
||||||
|
If a bug or issue is discovered in a version that has a release
|
||||||
|
candidate being tested, any fix and new version will need to be applied
|
||||||
|
against `release`, then reverse-merged to `develop`. This helps keep git
|
||||||
|
history as linear as possible.
|
||||||
|
|
||||||
|
A `release-next` branch will be created from `release`, and any further
|
||||||
|
work for that release must be based on `release-next`. Specifically,
|
||||||
|
PRs must use `release-next` as the base, and those PRs will be merged
|
||||||
|
directly to `release-next` when approved. Changes should be restricted
|
||||||
|
to bug fixes, but other changes may be necessary from time to time.
|
||||||
|
|
||||||
|
1. Open any PRs for the pending release using `release-next` as the base,
|
||||||
|
so they can be merged directly in to it. Unlike `develop`, though,
|
||||||
|
`release-next` can be thrown away and recreated if necessary.
|
||||||
|
2. Once a new release candidate is ready, create a version commit as in
|
||||||
|
step 1 [above](#making-the-release) on `release-next`. You can use
|
||||||
|
the [update-version] script for this, too.
|
||||||
|
3. Jump to step 8 ("Now create a Pull Request for `release-next` with
|
||||||
|
**`release`** as the base") from the process
|
||||||
|
[above](#making-the-release) to merge `release-next` into `release`.
|
||||||
|
|
||||||
|
##### Follow up: reverse merge
|
||||||
|
|
||||||
|
Once the RC is merged and tagged, it needs to be reverse merged into
|
||||||
|
`develop` as soon as possible.
|
||||||
|
|
||||||
|
1. Create a branch, based on `upstream/develop`.
|
||||||
|
The branch name is not important, but could include "mergeNNNrcN".
|
||||||
|
E.g. For release A.B.C-rcD, use `mergeABCrcD`.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
git checkout --no-track -b mergeABCrcD upstream/develop
|
||||||
|
```
|
||||||
|
2. Merge `release` into your branch.
|
||||||
|
```
|
||||||
|
# I like the "--edit --log --verbose" parameters, but they are
|
||||||
|
# not required.
|
||||||
|
git merge upstream/release
|
||||||
|
```
|
||||||
|
3. `BuildInfo.cpp` will have a conflict with the version number.
|
||||||
|
Resolve it with the version from `develop` - the higher version.
|
||||||
|
4. Push your branch to your repo (or `upstream` if you have permission),
|
||||||
|
and open a normal PR against `develop`. The "High level overview" can
|
||||||
|
simply indicate that this is a merge of the RC. The "Context" should
|
||||||
|
summarize the changes from the RC. Include the following text
|
||||||
|
prominently:
|
||||||
|
```
|
||||||
|
This PR must be merged manually using a push. Do not use the Github UI.
|
||||||
|
```
|
||||||
|
5. Depending on the complexity of the changes, and/or merge conflicts,
|
||||||
|
the PR may need a thorough review, or just a sign-off that the
|
||||||
|
merge was done correctly.
|
||||||
|
6. If `develop` is updated before this PR is merged, do not merge
|
||||||
|
`develop` back into your branch. Instead rebase preserving merges,
|
||||||
|
or do the merge again. (See also the `rerere` git config setting.)
|
||||||
|
```
|
||||||
|
git rebase --rebase-merges upstream/develop
|
||||||
|
# OR
|
||||||
|
git reset --hard upstream/develop
|
||||||
|
git merge upstream/release
|
||||||
|
```
|
||||||
|
7. When the PR is ready, push it to `develop`.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
# Make sure the commits look right
|
||||||
|
git log --show-signature "upstream/develop^..HEAD"
|
||||||
|
|
||||||
|
git push upstream-push mergeABCrcD:develop
|
||||||
|
|
||||||
|
git fetch upstreams
|
||||||
|
```
|
||||||
|
Development on `develop` can proceed as normal.
|
||||||
|
|
||||||
|
|
||||||
[1]: https://docs.github.com/en/get-started/quickstart/contributing-to-projects
|
#### Final releases
|
||||||
[2]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#squash-and-merge-your-commits
|
|
||||||
|
A final release is any release that is not a beta or RC, such as 2.2.0.
|
||||||
|
|
||||||
|
Only code that has already been tested and vetted across all three
|
||||||
|
platforms should be included in a final release. Most of the time, that
|
||||||
|
means that the commit immediately preceding the commit setting the
|
||||||
|
version number will be an RC. Occasionally, there may be last-minute bug
|
||||||
|
fixes included as well. If so, those bug fixes must have been tested
|
||||||
|
internally as if they were RCs (at minimum, ensuring unit tests pass,
|
||||||
|
and the app starts, syncs, and stops cleanly across all three
|
||||||
|
platforms.)
|
||||||
|
|
||||||
|
*If in doubt, make an RC first.*
|
||||||
|
|
||||||
|
The process for building a final release is very similar to [the process
|
||||||
|
for building a beta](#making-the-release), except the code will be
|
||||||
|
moving from `release` to `master` instead of from `develop` to
|
||||||
|
`release`, and both branches will be pushed at the same time.
|
||||||
|
|
||||||
|
1. Ensure there is no old `master-next` branch hanging around.
|
||||||
|
Then make a `master-next` branch that only changes the version
|
||||||
|
number. As above, or using the
|
||||||
|
[update-version] script.
|
||||||
|
2. Create a Pull Request for `master-next` with **`master`** as
|
||||||
|
the base branch. Instead of the default template, reuse and update
|
||||||
|
the message from the previous final release. Include the following verbiage
|
||||||
|
somewhere in the description:
|
||||||
|
```
|
||||||
|
The base branch is `master`. This PR branch will be pushed directly to
|
||||||
|
`release` and `master` (not squashed or rebased, and not using the
|
||||||
|
GitHub UI).
|
||||||
|
```
|
||||||
|
7. Sign-offs for the three platforms (Linux, Mac, Windows) usually occur
|
||||||
|
offline, but at least one approval will be needed on the PR.
|
||||||
|
* If issues are discovered during testing, close the PR, delete
|
||||||
|
`master-next`, and move development back to `release`, [issuing
|
||||||
|
more RCs as necessary](#release-candidates-after-the-first)
|
||||||
|
8. Once everything is ready to go, push to `release` and `master`.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
# Just to be safe, do dry runs first:
|
||||||
|
git push --dry-run upstream-push master-next:release
|
||||||
|
git push --dry-run upstream-push master-next:master
|
||||||
|
|
||||||
|
# If everything looks right, push the branch
|
||||||
|
git push upstream-push master-next:release
|
||||||
|
git push upstream-push master-next:master
|
||||||
|
|
||||||
|
# Check that all of the branches are updated
|
||||||
|
git fetch upstreams
|
||||||
|
git log -1 --oneline
|
||||||
|
# The output should look like:
|
||||||
|
# 0123456789 (HEAD -> upstream/master-next, upstream/master,
|
||||||
|
# upstream/release) Set version to A.B.0
|
||||||
|
# Note that both upstream/release and upstream/master must be on this
|
||||||
|
# commit.
|
||||||
|
# Other branches, including some from upstream-push, may also be
|
||||||
|
# present.
|
||||||
|
```
|
||||||
|
9. Tag the release, too.
|
||||||
|
```
|
||||||
|
git tag <version number>
|
||||||
|
git push upstream-push <version number>
|
||||||
|
```
|
||||||
|
10. Delete the `master-next` branch on the repo. Use the Github UI or:
|
||||||
|
```
|
||||||
|
git push --delete upstream-push master-next
|
||||||
|
```
|
||||||
|
11. [Create a new release on
|
||||||
|
Github](https://github.com/XRPLF/rippled/releases). Be sure that
|
||||||
|
"Set as the latest release" is checked.
|
||||||
|
12. Finally [reverse merge the release into `develop`](#follow-up-reverse-merge).
|
||||||
|
|
||||||
|
#### Special cases: point releases, hotfixes, etc.
|
||||||
|
|
||||||
|
On occassion, a bug or issue is discovered in a version that already
|
||||||
|
had a final release. Most of the time, development will have started
|
||||||
|
on the next version, and will usually have changes in `develop`
|
||||||
|
and often in `release`.
|
||||||
|
|
||||||
|
Because git history is kept as linear as possible, any fix and new
|
||||||
|
version will need to be applied against `master`.
|
||||||
|
|
||||||
|
The process for building a hotfix release is very similar to [the
|
||||||
|
process for building release candidates after the
|
||||||
|
first](#release-candidates-after-the-first) and [for building a final
|
||||||
|
release](#final-releases), except the changes will be done against
|
||||||
|
`master` instead of `release`.
|
||||||
|
|
||||||
|
If there is only a single issue for the hotfix, the work can be done in
|
||||||
|
any branch. When it's ready to merge, jump to step 3 using your branch
|
||||||
|
instead of `master-next`.
|
||||||
|
|
||||||
|
1. Create a `master-next` branch from `master`.
|
||||||
|
```
|
||||||
|
git checkout --no-track -b master-next upstream/master
|
||||||
|
git push upstream-push
|
||||||
|
git fetch upstreams
|
||||||
|
```
|
||||||
|
2. Open any PRs for the pending hotfix using `master-next` as the base,
|
||||||
|
so they can be merged directly in to it. Unlike `develop`, though,
|
||||||
|
`master-next` can be thrown away and recreated if necessary.
|
||||||
|
3. Once the hotfix is ready, create a version commit using the same
|
||||||
|
steps as above, or use the
|
||||||
|
[update-version] script.
|
||||||
|
4. Create a Pull Request for `master-next` with **`master`** as
|
||||||
|
the base branch. Instead of the default template, reuse and update
|
||||||
|
the message from the previous final release. Include the following verbiage
|
||||||
|
somewhere in the description:
|
||||||
|
```
|
||||||
|
The base branch is `master`. This PR branch will be pushed directly to
|
||||||
|
`master` (not squashed or rebased, and not using the GitHub UI).
|
||||||
|
```
|
||||||
|
7. Sign-offs for the three platforms (Linux, Mac, Windows) usually occur
|
||||||
|
offline, but at least one approval will be needed on the PR.
|
||||||
|
* If issues are discovered during testing, update `master-next` as
|
||||||
|
needed, but ensure that the changes are properly squashed, and the
|
||||||
|
version setting commit remains last
|
||||||
|
8. Once everything is ready to go, push to `master` **only**.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
# Just to be safe, do a dry run first:
|
||||||
|
git push --dry-run upstream-push master-next:master
|
||||||
|
|
||||||
|
# If everything looks right, push the branch
|
||||||
|
git push upstream-push master-next:master
|
||||||
|
|
||||||
|
# Check that all of the branches are updated
|
||||||
|
git fetch upstreams
|
||||||
|
git log -1 --oneline
|
||||||
|
# The output should look like:
|
||||||
|
# 0123456789 (HEAD -> upstream/master-next, upstream/master) Set version
|
||||||
|
# to 2.4.1
|
||||||
|
# Note that upstream/master must be on this commit. upstream/release and
|
||||||
|
# upstream/develop should not.
|
||||||
|
# Other branches, including some from upstream-push, may also be
|
||||||
|
# present.
|
||||||
|
```
|
||||||
|
9. Tag the release, too.
|
||||||
|
```
|
||||||
|
git tag <version number>
|
||||||
|
git push upstream-push <version number>
|
||||||
|
```
|
||||||
|
9. Delete the `master-next` branch on the repo.
|
||||||
|
```
|
||||||
|
git push --delete upstream-push master-next
|
||||||
|
```
|
||||||
|
10. [Create a new release on
|
||||||
|
Github](https://github.com/XRPLF/rippled/releases). Be sure that
|
||||||
|
"Set as the latest release" is checked.
|
||||||
|
|
||||||
|
Once the hotfix is released, it needs to be reverse merged into
|
||||||
|
`develop` as soon as possible. It may also need to be merged into
|
||||||
|
`release` if a release candidate is under development.
|
||||||
|
|
||||||
|
1. Create a branch in your own repo, based on `upstream/develop`.
|
||||||
|
The branch name is not important, but could include "mergeNNN".
|
||||||
|
E.g. For release 2.2.3, use `merge223`.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
git checkout --no-track -b merge223 upstream/develop
|
||||||
|
```
|
||||||
|
2. Merge master into your branch.
|
||||||
|
```
|
||||||
|
# I like the "--edit --log --verbose" parameters, but they are
|
||||||
|
# not required.
|
||||||
|
git merge upstream/master
|
||||||
|
```
|
||||||
|
3. `BuildInfo.cpp` will have a conflict with the version number.
|
||||||
|
Resolve it with the version from `develop` - the higher version.
|
||||||
|
4. Push your branch to your repo, and open a normal PR against
|
||||||
|
`develop`. The "High level overview" can simply indicate that this
|
||||||
|
is a merge of the hotfix version. The "Context" should summarize
|
||||||
|
the changes from the hotfix. Include the following text
|
||||||
|
prominently:
|
||||||
|
```
|
||||||
|
This PR must be merged manually using a --ff-only merge. Do not use the Github UI.
|
||||||
|
```
|
||||||
|
5. Depending on the complexity of the hotfix, and/or merge conflicts,
|
||||||
|
the PR may need a thorough review, or just a sign-off that the
|
||||||
|
merge was done correctly.
|
||||||
|
6. If `develop` is updated before this PR is merged, do not merge
|
||||||
|
`develop` back into your branch. Instead rebase preserving merges,
|
||||||
|
or do the merge again. (See also the `rerere` git config setting.)
|
||||||
|
```
|
||||||
|
git rebase --rebase-merges upstream/develop
|
||||||
|
# OR
|
||||||
|
git reset --hard upstream/develop
|
||||||
|
git merge upstream/master
|
||||||
|
```
|
||||||
|
7. When the PR is ready, push it to `develop`.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
# Make sure the commits look right
|
||||||
|
git log --show-signature "upstream/develop..HEAD"
|
||||||
|
|
||||||
|
git push upstream-push HEAD:develop
|
||||||
|
```
|
||||||
|
Development on `develop` can proceed as normal. It is recommended to
|
||||||
|
create a beta (or RC) immediately to ensure that everything worked as
|
||||||
|
expected.
|
||||||
|
|
||||||
|
##### An even rarer scenario: A hotfix on an old release
|
||||||
|
|
||||||
|
Historically, once a final release is tagged and packages are released,
|
||||||
|
versions older than the latest final release are no longer supported.
|
||||||
|
However, there is a possibility that a very high severity bug may occur
|
||||||
|
in a non-amendment blocked version that is still being run by
|
||||||
|
a significant fraction of users, which would necessitate a hotfix / point
|
||||||
|
release to that version as well as any later versions.
|
||||||
|
|
||||||
|
This scenario would follow the same basic procedure as above,
|
||||||
|
except that *none* of `develop`, `release`, or `master`
|
||||||
|
would be touched during the release process.
|
||||||
|
|
||||||
|
In this example, consider if version 2.1.1 needed to be patched.
|
||||||
|
|
||||||
|
1. Create two branches in the main (`upstream`) repo.
|
||||||
|
```
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
# Create a base branch off the tag
|
||||||
|
git checkout --no-track -b master-2.1.2 2.1.1
|
||||||
|
git push upstream-push
|
||||||
|
|
||||||
|
# Create a working branch
|
||||||
|
git checkout --no-track -b master212-next master-2.1.2
|
||||||
|
git push upstream-push
|
||||||
|
|
||||||
|
git fetch upstreams
|
||||||
|
```
|
||||||
|
2. Work continues as above, except using `master-2.1.2`as
|
||||||
|
the base branch for any merging, packaging, etc.
|
||||||
|
3. After the release is tagged and packages are built, you could
|
||||||
|
potentially delete both branches, e.g. `master-2.1.2` and
|
||||||
|
`master212-next`. However, it may be useful to keep `master-2.1.2`
|
||||||
|
around indefinitely for reference.
|
||||||
|
4. Assuming that a hotfix is also released for the latest
|
||||||
|
version in parallel with this one, or if the issue is
|
||||||
|
already fixed in the latest version, do no do any
|
||||||
|
reverse merges. However, if it is not, it probably makes
|
||||||
|
sense to reverse merge `master-2.1.2` into `master`,
|
||||||
|
release a hotfix for _that_ version, then reverse merge
|
||||||
|
from `master` to `develop`. (Please don't do this unless absolutely
|
||||||
|
necessary.)
|
||||||
|
|
||||||
|
[contrib]: https://docs.github.com/en/get-started/quickstart/contributing-to-projects
|
||||||
|
[squash]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#squash-and-merge-your-commits
|
||||||
|
[forking]: https://github.com/XRPLF/rippled/fork
|
||||||
|
[rippled]: https://github.com/XRPLF/rippled
|
||||||
|
[signing]: https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification
|
||||||
|
[setup-upstreams]: ./bin/git/setup-upstreams.sh
|
||||||
|
[squash-branches]: ./bin/git/squash-branches.sh
|
||||||
|
[update-version]: ./bin/git/update-version.sh
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
[](https://codecov.io/gh/XRPLF/rippled)
|
||||||
|
|
||||||
# The XRP Ledger
|
# The XRP Ledger
|
||||||
|
|
||||||
The [XRP Ledger](https://xrpl.org/) is a decentralized cryptographic ledger powered by a network of peer-to-peer nodes. The XRP Ledger uses a novel Byzantine Fault Tolerant consensus algorithm to settle and record transactions in a secure distributed database without a central operator.
|
The [XRP Ledger](https://xrpl.org/) is a decentralized cryptographic ledger powered by a network of peer-to-peer nodes. The XRP Ledger uses a novel Byzantine Fault Tolerant consensus algorithm to settle and record transactions in a secure distributed database without a central operator.
|
||||||
@@ -8,7 +10,7 @@ The [XRP Ledger](https://xrpl.org/) is a decentralized cryptographic ledger powe
|
|||||||
## rippled
|
## rippled
|
||||||
The server software that powers the XRP Ledger is called `rippled` and is available in this repository under the permissive [ISC open-source license](LICENSE.md). The `rippled` server software is written primarily in C++ and runs on a variety of platforms. The `rippled` server software can run in several modes depending on its [configuration](https://xrpl.org/rippled-server-modes.html).
|
The server software that powers the XRP Ledger is called `rippled` and is available in this repository under the permissive [ISC open-source license](LICENSE.md). The `rippled` server software is written primarily in C++ and runs on a variety of platforms. The `rippled` server software can run in several modes depending on its [configuration](https://xrpl.org/rippled-server-modes.html).
|
||||||
|
|
||||||
If you are interested in running an **API Server** (including a **Full History Server**) or a **Reporting Mode** server, take a look at [Clio](https://github.com/XRPLF/clio). rippled Reporting Mode is expected to be replaced by Clio.
|
If you are interested in running an **API Server** (including a **Full History Server**), take a look at [Clio](https://github.com/XRPLF/clio). (rippled Reporting Mode has been replaced by Clio.)
|
||||||
|
|
||||||
### Build from Source
|
### Build from Source
|
||||||
|
|
||||||
|
|||||||
850
RELEASENOTES.md
850
RELEASENOTES.md
@@ -4,8 +4,856 @@
|
|||||||
|
|
||||||
This document contains the release notes for `rippled`, the reference server implementation of the XRP Ledger protocol. To learn more about how to build, run or update a `rippled` server, visit https://xrpl.org/install-rippled.html
|
This document contains the release notes for `rippled`, the reference server implementation of the XRP Ledger protocol. To learn more about how to build, run or update a `rippled` server, visit https://xrpl.org/install-rippled.html
|
||||||
|
|
||||||
|
|
||||||
Have new ideas? Need help with setting up your node? [Please open an issue here](https://github.com/xrplf/rippled/issues/new/choose).
|
Have new ideas? Need help with setting up your node? [Please open an issue here](https://github.com/xrplf/rippled/issues/new/choose).
|
||||||
|
## Full Changelog
|
||||||
|
|
||||||
|
### Amendments
|
||||||
|
|
||||||
|
The following amendments are open for voting with this release:
|
||||||
|
|
||||||
|
- **DynamicNFT (XLS-46)** - Adds the ability to mint mutable `NFToken` objects whose URI can be changed. ([#5048](https://github.com/XRPLF/rippled/pull/5048))
|
||||||
|
- **PermissionedDomains (XLS-80)** - Adds Permissioned Domains, which act as part of broader systems on the XRP Ledger to restrict access to satisfy compliance rules. ([#5161](https://github.com/XRPLF/rippled/pull/5161))
|
||||||
|
- **DeepFreeze (XLS-77)** - Adds the ability to deep freeze trust lines, enabling token issuers to block the transfer of assets for holders who have been deep frozen. ([#5187](https://github.com/XRPLF/rippled/pull/5187))
|
||||||
|
- **fixFrozenLPTokenTransfer** - Prohibits the transfer of LP tokens when the associated liquidity pool contains at least one frozen asset. ([#5227](https://github.com/XRPLF/rippled/pull/5227))
|
||||||
|
- **fixInvalidTxFlags** - Adds transaction flag checking for `CredentialCreate`, `CredentialAccept`, and `CredentialDelete` transactions. ([#5250](https://github.com/XRPLF/rippled/pull/5250))
|
||||||
|
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- Added a new `simulate` API method to execute dry runs of transactions and see the simulated metadata. ([#5069](https://github.com/XRPLF/rippled/pull/5069), [#5265](https://github.com/XRPLF/rippled/pull/5265))
|
||||||
|
- Added the ability to specify MPTs when defining assets in transactions. ([#5200](https://github.com/XRPLF/rippled/pull/5200))
|
||||||
|
- Added a `state` alias for `ripple_state` in the `ledger_entry` API method. Also refactored `LedgerEntry.cpp` to make it easier to read. ([#5199](https://github.com/XRPLF/rippled/pull/5199))
|
||||||
|
- Improved UNL security by enabling validators to set a minimum number of UNL publishers to agree on validators. ([#5112](https://github.com/XRPLF/rippled/pull/5112))
|
||||||
|
- Updated the XRPL Foundation UNL keys. ([#5289](https://github.com/XRPLF/rippled/pull/5289))
|
||||||
|
- Added a new XRPL Foundation subdomain to enable a staged migration without modifying the key for the current UNL list. ([#5326](https://github.com/XRPLF/rippled/pull/5326))
|
||||||
|
- Added support to filter ledger entry types by their canonical names in the `ledger`, `ledger_data`, and `account_objects` API methods. ([#5271](https://github.com/XRPLF/rippled/pull/5271))
|
||||||
|
- Added detailed logging for each validation and proposal received from the network. ([#5291](https://github.com/XRPLF/rippled/pull/5291))
|
||||||
|
- Improved git commit hash lookups when checking the version of a `rippled` debug build. Also added git commit hash info when using the `server_info` API method on an admin connection. ([#5225](https://github.com/XRPLF/rippled/pull/5225))
|
||||||
|
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- Fixed an issue with overlapping data types in the `Expected` class. ([#5218](https://github.com/XRPLF/rippled/pull/5218))
|
||||||
|
- Fixed an issue that prevented `rippled` from building on Windows with VS2022. ([#5197](https://github.com/XRPLF/rippled/pull/5197))
|
||||||
|
- Fixed `server_definitions` prefixes. ([#5231](https://github.com/XRPLF/rippled/pull/5231))
|
||||||
|
- Added missing dependency installations for generic MasOS runners. ([#5233](https://github.com/XRPLF/rippled/pull/5233))
|
||||||
|
- Updated deprecated Github actions. ([#5241](https://github.com/XRPLF/rippled/pull/5241))
|
||||||
|
- Fixed a failing assert scenario when submitting the `connect` admin RPC. ([#5235](https://github.com/XRPLF/rippled/pull/5235))
|
||||||
|
- Fixed the levelization script to ignore single-line comments during dependency analysis. ([#5194](https://github.com/XRPLF/rippled/pull/5194))
|
||||||
|
- Fixed the assert name used in `PermissionedDomainDelete`. ([#5245](https://github.com/XRPLF/rippled/pull/5245))
|
||||||
|
- Fixed macOS unit tests. ([#5196](https://github.com/XRPLF/rippled/pull/5196))
|
||||||
|
- Fixed an issue with validators not accurately reflecting amendment votes. Also added debug logging of amendment votes. ([#5173](https://github.com/XRPLF/rippled/pull/5173), [#5312](https://github.com/XRPLF/rippled/pull/5312))
|
||||||
|
- Fixed a potential issue with double-charging fees. ([#5269](https://github.com/XRPLF/rippled/pull/5269))
|
||||||
|
- Removed the `new parent hash` assert and replaced it with a log message. ([#5313](https://github.com/XRPLF/rippled/pull/5313))
|
||||||
|
- Fixed an issue that prevented previously-failed inbound ledgers to not be acquired if a new trusted proposal arrived. ([#5318](https://github.com/XRPLF/rippled/pull/5318))
|
||||||
|
|
||||||
|
|
||||||
|
### Other Improvements
|
||||||
|
|
||||||
|
- Added unit tests for `AccountID` handling. ([#5174](https://github.com/XRPLF/rippled/pull/5174))
|
||||||
|
- Added enforced levelization in `libxrpl` with CMake. ([#5199](https://github.com/XRPLF/rippled/pull/5111))
|
||||||
|
- Updated `libxrpl` and all submodules to use the same compiler options. ([#5228](https://github.com/XRPLF/rippled/pull/5228))
|
||||||
|
- Added Antithesis instrumentation. ([#5042](https://github.com/XRPLF/rippled/pull/5042), [#5213](https://github.com/XRPLF/rippled/pull/5213))
|
||||||
|
- Added `rpcName` to the `LEDGER_ENTRY` macro to help prevent future bugs. ([#5202](https://github.com/XRPLF/rippled/pull/5202))
|
||||||
|
- Updated the contribution guidelines to introduce a new workflow that avoids code freezes. Also added scripts that can be used by maintainers in branch management, and a CI job to check that code is consistent across the three main branches: `master`, `release`, and `develop`. ([#5215](https://github.com/XRPLF/rippled/pull/5215))
|
||||||
|
- Added unit tests to check for caching issues fixed in `rippled 2.3.0`. ([#5242](https://github.com/XRPLF/rippled/pull/5242))
|
||||||
|
- Cleaned up the API changelog. ([#5207](https://github.com/XRPLF/rippled/pull/5207))
|
||||||
|
- Improved logs readability. ([#5251](https://github.com/XRPLF/rippled/pull/5251))
|
||||||
|
- Updated Visual Studio CI to VS 2022, and added VS Debug builds. ([#5240](https://github.com/XRPLF/rippled/pull/5240))
|
||||||
|
- Updated the `secp256k1` library to version 0.6.0. ([#5254](https://github.com/XRPLF/rippled/pull/5254))
|
||||||
|
- Changed the `[port_peer]` parameter in `rippled` example config back to `51235`; also added the recommendation to use the default port of `2459` for new deployments. ([#5290](https://github.com/XRPLF/rippled/pull/5290), [#5299](https://github.com/XRPLF/rippled/pull/5299))
|
||||||
|
- Improved CI management. ([#5268](https://github.com/XRPLF/rippled/pull/5268))
|
||||||
|
- Updated the git commit message rules for contributors. ([#5283](https://github.com/XRPLF/rippled/pull/5283))
|
||||||
|
- Fixed unnecessary `setCurrentThreadName` calls. ([#5280](https://github.com/XRPLF/rippled/pull/5280))
|
||||||
|
- Added a check to prevent permissioned domains from being created in the event the Permissioned Domains amendement is enabled before the Credentials amendement. ([#5275](https://github.com/XRPLF/rippled/pull/5275))
|
||||||
|
- Updated Conan dependencies. ([#5256](https://github.com/XRPLF/rippled/pull/5256))
|
||||||
|
- Fixed minor typos in code comments. ([#5279](https://github.com/XRPLF/rippled/pull/5279))
|
||||||
|
- Fixed incorrect build instructions. ([#5274](https://github.com/XRPLF/rippled/pull/5274))
|
||||||
|
- Refactored `rotateWithLock()` to not hold a lock during callbacks. ([#5276](https://github.com/XRPLF/rippled/pull/5276))
|
||||||
|
- Cleaned up debug logging by combining multiple data points into a single message. ([#5302](https://github.com/XRPLF/rippled/pull/5302))
|
||||||
|
- Updated build flags to fix performance regressions. ([#5325](https://github.com/XRPLF/rippled/pull/5325))
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
- Aanchal Malhotra <amalhotra@ripple.com>
|
||||||
|
- Bart Thomee <11445373+bthomee@users.noreply.github.com>
|
||||||
|
- Bronek Kozicki <brok@incorrekt.com>
|
||||||
|
- code0xff <ian.jungyong.um@gmail.com>
|
||||||
|
- Darius Tumas <tokeiito@tokeiito.eu>
|
||||||
|
- David Fuelling <fuelling@ripple.com>
|
||||||
|
- Donovan Hide <donovanhide@gmail.com>
|
||||||
|
- Ed Hennis <ed@ripple.com>
|
||||||
|
- Elliot Lee <github.public@intelliot.com>
|
||||||
|
- Javier Romero <jromero@ripple.com>
|
||||||
|
- Kenny Lei <klei@ripple.com>
|
||||||
|
- Mark Travis <7728157+mtrippled@users.noreply.github.com>
|
||||||
|
- Mayukha Vadari <mvadari@gmail.com>
|
||||||
|
- Michael Legleux <mlegleux@ripple.com>
|
||||||
|
- Oleksandr <115580134+oleks-rip@users.noreply.github.com>
|
||||||
|
- Qi Zhao <qzhao@ripple.com>
|
||||||
|
- Ramkumar Srirengaram Gunasegharan <rgunasegharan@ripple.com>
|
||||||
|
- Shae Wang <swang@ripple.com>
|
||||||
|
- Shawn Xie <shawnxie920@gmail.com>
|
||||||
|
- Sophia Xie <sxie@ripple.com>
|
||||||
|
- Vijay Khanna Raviraj <vraviraj@ripple.com>
|
||||||
|
- Vladislav Vysokikh <vvysokikh@gmail.com>
|
||||||
|
- Xun Zhao <xzhao@ripple.com>
|
||||||
|
|
||||||
|
## Bug Bounties and Responsible Disclosures
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
# Version 2.3.1
|
||||||
|
|
||||||
|
Version 2.3.1 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available.
|
||||||
|
This is a hotfix release that includes the following updates:
|
||||||
|
- Fix an erroneous high fee penalty that peers could incur for sending older transactions.
|
||||||
|
- Update to the fees charged for imposing a load on the server.
|
||||||
|
- Prevent the relaying of internal pseudo-transactions.
|
||||||
|
- Before: Pseudo-transactions received from a peer will fail the signature check, even if they were requested (using TMGetObjectByHash) because they have no signature. This causes the peer to be charged for an invalid signature.
|
||||||
|
- After: Pseudo-transactions, are put into the global cache (TransactionMaster) only. If the transaction is not part of a TMTransactions batch, the peer is charged an unwanted data fee. These fees will not be a problem in the normal course of operations but should dissuade peers from behaving badly by sending a bunch of junk.
|
||||||
|
- Improved logging now specifies the reason for the fee charged to the peer.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
If you run an XRP Ledger validator, upgrade to version 2.3.1 as soon as possible to ensure stable and uninterrupted network behavior.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Amendments and New Features
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
### Bug Fixes and Performance Improvements
|
||||||
|
|
||||||
|
- Change the charged fee for sending older transactions from feeInvalidSignature to feeUnwantedData. [#5243](https://github.com/XRPLF/rippled/pull/5243)
|
||||||
|
|
||||||
|
### Docs and Build System
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
Ed Hennis <ed@ripple.com>
|
||||||
|
JoelKatz <DavidJoelSchwartz@GMail.com>
|
||||||
|
Sophia Xie <106177003+sophiax851@users.noreply.github.com>
|
||||||
|
Valentin Balaschenko <13349202+vlntb@users.noreply.github.com>
|
||||||
|
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
# Version 2.3.0
|
||||||
|
|
||||||
|
Version 2.3.0 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release includes 8 new amendments, including Multi-Purpose Tokens, Credentials, Clawback support for AMMs, and the ability to make offers as part of minting NFTs. Additionally, this release includes important fixes for stability, so server operators are encouraged to upgrade as soon as possible.
|
||||||
|
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
If you run an XRP Ledger server, upgrade to version 2.3.0 as soon as possible to ensure service continuity.
|
||||||
|
|
||||||
|
Additionally, new amendments are now open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
|
||||||
|
|
||||||
|
## Full Changelog
|
||||||
|
|
||||||
|
### Amendments
|
||||||
|
|
||||||
|
The following amendments are open for voting with this release:
|
||||||
|
|
||||||
|
- **XLS-70 Credentials** - Users can issue Credentials on the ledger and use Credentials to pre-approve incoming payments when using Deposit Authorization instead of individually approving payers. ([#5103](https://github.com/XRPLF/rippled/pull/5103))
|
||||||
|
- related fix: #5189 (https://github.com/XRPLF/rippled/pull/5189)
|
||||||
|
- **XLS-33 Multi-Purpose Tokens** - A new type of fungible token optimized for institutional DeFi including stablecoins. ([#5143](https://github.com/XRPLF/rippled/pull/5143))
|
||||||
|
- **XLS-37 AMM Clawback** - Allows clawback-enabled tokens to be used in AMMs, with appropriate guardrails. ([#5142](https://github.com/XRPLF/rippled/pull/5142))
|
||||||
|
- **XLS-52 NFTokenMintOffer** - Allows creating an NFT sell offer as part of minting a new NFT. ([#4845](https://github.com/XRPLF/rippled/pull/4845))
|
||||||
|
- **fixAMMv1_2** - Fixes two bugs in Automated Market Maker (AMM) transaction processing. ([#5176](https://github.com/XRPLF/rippled/pull/5176))
|
||||||
|
- **fixNFTokenPageLinks** - Fixes a bug that can cause NFT directories to have missing links, and introduces a transaction to repair corrupted ledger state. ([#4945](https://github.com/XRPLF/rippled/pull/4945))
|
||||||
|
- **fixEnforceNFTokenTrustline** - Fixes two bugs in the interaction between NFT offers and trust lines. ([#4946](https://github.com/XRPLF/rippled/pull/4946))
|
||||||
|
- **fixInnerObjTemplate2** - Standardizes the way inner objects are enforced across all transaction and ledger data. ([#5047](https://github.com/XRPLF/rippled/pull/5047))
|
||||||
|
|
||||||
|
The following amendment is partially implemented but not open for voting:
|
||||||
|
|
||||||
|
- **InvariantsV1_1** - Adds new invariants to ensure transactions process as intended, starting with an invariant to ensure that ledger entries owned by an account are deleted when the account is deleted. ([#4663](https://github.com/XRPLF/rippled/pull/4663))
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- Allow configuration of SQLite database page size. ([#5135](https://github.com/XRPLF/rippled/pull/5135), [#5140](https://github.com/XRPLF/rippled/pull/5140))
|
||||||
|
- In the `libxrpl` C++ library, provide a list of known amendments. ([#5026](https://github.com/XRPLF/rippled/pull/5026))
|
||||||
|
|
||||||
|
### Deprecations
|
||||||
|
|
||||||
|
- History Shards are removed. ([#5066](https://github.com/XRPLF/rippled/pull/5066))
|
||||||
|
- Reporting mode is removed. ([#5092](https://github.com/XRPLF/rippled/pull/5092))
|
||||||
|
|
||||||
|
For users wanting to store more ledger history, it is recommended to run a Clio server instead.
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- Fix a crash in debug builds when amm_info request contains an invalid AMM account ID. ([#5188](https://github.com/XRPLF/rippled/pull/5188))
|
||||||
|
- Fix a crash caused by a race condition in peer-to-peer code. ([#5071](https://github.com/XRPLF/rippled/pull/5071))
|
||||||
|
- Fix a crash in certain situations
|
||||||
|
- Fix several bugs in the book_changes API method. ([#5096](https://github.com/XRPLF/rippled/pull/5096))
|
||||||
|
- Fix bug triggered by providing an invalid marker to the account_nfts API method. ([#5045](https://github.com/XRPLF/rippled/pull/5045))
|
||||||
|
- Accept lower-case hexadecimal in compact transaction identifier (CTID) parameters in API methods. ([#5049](https://github.com/XRPLF/rippled/pull/5049))
|
||||||
|
- Disallow filtering by types that an account can't own in the account_objects API method. ([#5056](https://github.com/XRPLF/rippled/pull/5056))
|
||||||
|
- Fix error code returned by the feature API method when providing an invalid parameter. ([#5063](https://github.com/XRPLF/rippled/pull/5063))
|
||||||
|
- (API v3) Fix error code returned by amm_info when providing invalid parameters. ([#4924](https://github.com/XRPLF/rippled/pull/4924))
|
||||||
|
|
||||||
|
### Other Improvements
|
||||||
|
|
||||||
|
- Adds a new default hub, hubs.xrpkuwait.com, to the config file and bootstrapping code. ([#5169](https://github.com/XRPLF/rippled/pull/5169))
|
||||||
|
- Improve error message when commandline interface fails with `rpcInternal` because there was no response from the server. ([#4959](https://github.com/XRPLF/rippled/pull/4959))
|
||||||
|
- Add tools for debugging specific transactions via replay. ([#5027](https://github.com/XRPLF/rippled/pull/5027), [#5087](https://github.com/XRPLF/rippled/pull/5087))
|
||||||
|
- Major reorganization of source code files. ([#4997](https://github.com/XRPLF/rippled/pull/4997))
|
||||||
|
- Add new unit tests. ([#4886](https://github.com/XRPLF/rippled/pull/4886))
|
||||||
|
- Various improvements to build tools and contributor documentation. ([#5001](https://github.com/XRPLF/rippled/pull/5001), [#5028](https://github.com/XRPLF/rippled/pull/5028), [#5052](https://github.com/XRPLF/rippled/pull/5052), [#5091](https://github.com/XRPLF/rippled/pull/5091), [#5084](https://github.com/XRPLF/rippled/pull/5084), [#5120](https://github.com/XRPLF/rippled/pull/5120), [#5010](https://github.com/XRPLF/rippled/pull/5010). [#5055](https://github.com/XRPLF/rippled/pull/5055), [#5067](https://github.com/XRPLF/rippled/pull/5067), [#5061](https://github.com/XRPLF/rippled/pull/5061), [#5072](https://github.com/XRPLF/rippled/pull/5072), [#5044](https://github.com/XRPLF/rippled/pull/5044) )
|
||||||
|
- Various code cleanup and refactoring. ([#4509](https://github.com/XRPLF/rippled/pull/4509), [#4521](https://github.com/XRPLF/rippled/pull/4521), [#4856](https://github.com/XRPLF/rippled/pull/4856), [#5190](https://github.com/XRPLF/rippled/pull/5190), [#5081](https://github.com/XRPLF/rippled/pull/5081), [#5053](https://github.com/XRPLF/rippled/pull/5053), [#5058](https://github.com/XRPLF/rippled/pull/5058), [#5122](https://github.com/XRPLF/rippled/pull/5122), [#5059](https://github.com/XRPLF/rippled/pull/5059), [#5041](https://github.com/XRPLF/rippled/pull/5041))
|
||||||
|
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
|
||||||
|
# Version 2.2.3
|
||||||
|
|
||||||
|
Version 2.2.3 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release fixes a problem that can cause full-history servers to run out of space in their SQLite databases, depending on configuration. There are no new amendments in this release.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
## Background
|
||||||
|
|
||||||
|
The `rippled` server uses a SQLite database for tracking transactions, in addition to the main data store (usually NuDB) for ledger data. In servers keeping a large amount of history, this database can run out of space based on the configured number and size of database pages, even if the machine has disk space available. Based on the size of full history on Mainnet, servers with the default SQLite page size of 4096 may now run out of space if they store full history. In this case, your server may shut down with an error such as the following:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Free SQLite space for transaction db is less than 512MB. To fix this, rippled
|
||||||
|
must be executed with the vacuum <sqlitetmpdir> parameter before restarting.
|
||||||
|
Note that this activity can take multiple days, depending on database size.
|
||||||
|
```
|
||||||
|
|
||||||
|
The exact timing of when a server runs out of space can vary based on a few factors. Server operators who encountered a similar problem in 2018 and followed steps to [increase the SQLite transaction database page size issue](../../../docs/infrastructure/troubleshooting/fix-sqlite-tx-db-page-size-issue) may not encounter this problem at all. The `--vacuum` commandline option to `rippled` from that time may work to free up space in the database, but requires extended downtime.
|
||||||
|
|
||||||
|
Version 2.2.3 of `rippled` reconfigures the maximum number of SQLite pages so that the issue does not occur.
|
||||||
|
|
||||||
|
Clio servers providing full history are not affected by this issue.
|
||||||
|
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
If you run an [XRP Ledger full history server](https://xrpl.org/docs/infrastructure/configuration/data-retention/configure-full-history), upgrading to version 2.2.3 may prevent the server from crashing when `transaction.db` exceeds approximately 8.7 terabytes.
|
||||||
|
|
||||||
|
Additionally, five amendments introduced in version 2.2.0 are open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators. If you operate an XRP Ledger server older than version 2.2.0, upgrade by Sep 23, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
- Update SQLite3 max_page_count to match current defaults ([#5114](https://github.com/XRPLF/rippled/pull/5114))
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
J. Scott Branson <the@rabbitkick.club>
|
||||||
|
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
|
||||||
|
# Version 2.2.2
|
||||||
|
|
||||||
|
Version 2.2.2 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release fixes an ongoing issue with Mainnet where validators can stall during consensus processing due to lock contention, preventing ledgers from being validated for up to two minutes. There are no new amendments in this release.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
If you run an XRP Ledger validator, upgrade to version 2.2.2 as soon as possible to ensure stable and uninterrupted network behavior.
|
||||||
|
|
||||||
|
Additionally, five amendments introduced in version 2.2.0 are open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators. If you operate an XRP Ledger server older than version 2.2.0, upgrade by September 17, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network. Version 2.2.2 is recommended because of known bugs affecting stability of versions 2.2.0 and 2.2.1.
|
||||||
|
|
||||||
|
If you operate a Clio server, Clio needs to be updated to 2.1.2 before updating to rippled 2.2.0. Clio will be blocked if it is not updated.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Amendments and New Features
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
### Bug Fixes and Performance Improvements
|
||||||
|
|
||||||
|
- Allow only 1 job queue slot for acquiring inbound ledger [#5115](https://github.com/XRPLF/rippled/pull/5115) ([7741483](https://github.com/XRPLF/rippled/commit/774148389467781aca7c01bac90af2fba870570c))
|
||||||
|
|
||||||
|
- Allow only 1 job queue slot for each validation ledger check [#5115](https://github.com/XRPLF/rippled/pull/5115) ([fbbea9e](https://github.com/XRPLF/rippled/commit/fbbea9e6e25795a8a6bd1bf64b780771933a9579))
|
||||||
|
|
||||||
|
### Other improvements
|
||||||
|
|
||||||
|
- Track latencies of certain code blocks, and log if they take too long [#5115](https://github.com/XRPLF/rippled/pull/5115) ([00ed7c9](https://github.com/XRPLF/rippled/commit/00ed7c942436f02644a13169002b5123f4e2a116))
|
||||||
|
|
||||||
|
### Docs and Build System
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
Mark Travis <mtrippled@users.noreply.github.com>
|
||||||
|
Valentin Balaschenko <13349202+vlntb@users.noreply.github.com>
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
# Version 2.2.1
|
||||||
|
|
||||||
|
Version 2.2.1 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release fixes a critical bug introduced in 2.2.0 handling some types of RPC requests.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
If you run an XRP Ledger validator, upgrade to version 2.2.1 as soon as possible to ensure stable and uninterrupted network behavior.
|
||||||
|
|
||||||
|
Additionally, five amendments introduced in version 2.2.0 are open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators. If you operate an XRP Ledger server older than version 2.2.0, upgrade by August 14, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network. Version 2.2.1 is recommended because of known bugs affecting stability of versions 2.2.0.
|
||||||
|
|
||||||
|
If you operate a Clio server, Clio needs to be updated to 2.2.2 before updating to rippled 2.2.1. Clio will be blocked if it is not updated.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Amendments and New Features
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
### Bug Fixes and Performance Improvements
|
||||||
|
|
||||||
|
- Improve error handling in some RPC commands. [#5078](https://github.com/XRPLF/rippled/pull/5078)
|
||||||
|
|
||||||
|
- Use error codes throughout fast Base58 implementation. [#5078](https://github.com/XRPLF/rippled/pull/5078)
|
||||||
|
|
||||||
|
### Docs and Build System
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
John Freeman <jfreeman08@gmail.com>
|
||||||
|
Mayukha Vadari <mvadari@gmail.com>
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
|
||||||
|
# Version 2.2.0
|
||||||
|
|
||||||
|
Version 2.2.0 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release adds performance optimizations, several bug fixes, and introduces the `featurePriceOracle`, `fixEmptyDID`, `fixXChainRewardRounding`, `fixPreviousTxnID`, and `fixAMMv1_1` amendments.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
Five new amendments are now open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators.
|
||||||
|
|
||||||
|
If you operate an XRP Ledger server, upgrade to version 2.2.0 by June 17, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
|
||||||
|
|
||||||
|
If you operate a Clio server, Clio needs to be updated to 2.1.2 before updating to rippled 2.2.0. Clio will be blocked if it is not updated.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Amendments and New Features
|
||||||
|
(These are changes which may impact or be useful to end users. For example, you may be able to update your code/workflow to take advantage of these changes.)
|
||||||
|
|
||||||
|
- **featurePriceOracle** amendment: Implements a price oracle as defined in the [XLS-47](https://github.com/XRPLF/XRPL-Standards/blob/master/XLS-47d-PriceOracles/README.md) spec. A Price Oracle is used to bring real-world data, such as market prices, onto the blockchain, enabling dApps to access and utilize information that resides outside the blockchain. [#4789](https://github.com/XRPLF/rippled/pull/4789)
|
||||||
|
|
||||||
|
- **fixEmptyDID** amendment: Modifies the behavior of the DID amendment: adds an additional check to ensure that DIDs are non-empty when created, and returns a `tecEMPTY_DID` error if the DID would be empty. [#4950](https://github.com/XRPLF/rippled/pull/4950)
|
||||||
|
|
||||||
|
- **fixXChainRewardRounding** amendment: Modifies the behavior of the XChainBridge amendment: fixes rounding so reward shares are always rounded down, even when the `fixUniversalNumber` amendment is active. [#4933](https://github.com/XRPLF/rippled/pull/4933)
|
||||||
|
|
||||||
|
- **fixPreviousTxnID** amendment: Adds `PreviousTxnID` and `PreviousTxnLgrSequence` as fields to all ledger entries that did not already have them included (`DirectoryNode`, `Amendments`, `FeeSettings`, `NegativeUNL`, and `AMM`). Existing ledger entries will gain the fields whenever transactions modify those entries. [#4751](https://github.com/XRPLF/rippled/pull/4751).
|
||||||
|
|
||||||
|
- **fixAMMv1_1** amendment: Fixes AMM offer rounding and low quality order book offers from blocking the AMM. [#4983](https://github.com/XRPLF/rippled/pull/4983)
|
||||||
|
|
||||||
|
- Add a non-admin version of `feature` API method. [#4781](https://github.com/XRPLF/rippled/pull/4781)
|
||||||
|
|
||||||
|
### Bug Fixes and Performance Improvements
|
||||||
|
(These are behind-the-scenes improvements, such as internal changes to the code, which are not expected to impact end users.)
|
||||||
|
|
||||||
|
- Optimize the base58 encoder and decoder. The algorithm is now about 10 times faster for encoding and 15 times faster for decoding. [#4327](https://github.com/XRPLF/rippled/pull/4327)
|
||||||
|
|
||||||
|
- Optimize the `account_tx` SQL query. [#4955](https://github.com/XRPLF/rippled/pull/4955)
|
||||||
|
|
||||||
|
- Don't reach consensus as quickly if no other proposals are seen. [#4763](https://github.com/XRPLF/rippled/pull/4763)
|
||||||
|
|
||||||
|
- Fix a potential deadlock in the database module. [#4989](https://github.com/XRPLF/rippled/pull/4989)
|
||||||
|
|
||||||
|
- Enforce no duplicate slots from incoming connections. [#4944](https://github.com/XRPLF/rippled/pull/4944)
|
||||||
|
|
||||||
|
- Fix an order book update variable swap. [#4890](https://github.com/XRPLF/rippled/pull/4890)
|
||||||
|
|
||||||
|
### Docs and Build System
|
||||||
|
|
||||||
|
- Add unit test to raise the test coverage of the AMM. [#4971](https://github.com/XRPLF/rippled/pull/4971)
|
||||||
|
|
||||||
|
- Improve test coverage reporting. [#4977](https://github.com/XRPLF/rippled/pull/4977)
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
Alex Kremer <akremer@ripple.com>
|
||||||
|
Alloy Networks <45832257+alloynetworks@users.noreply.github.com>
|
||||||
|
Bronek Kozicki <brok@incorrekt.com>
|
||||||
|
Chenna Keshava <ckeshavabs@gmail.com>
|
||||||
|
Denis Angell <dangell@transia.co>
|
||||||
|
Ed Hennis <ed@ripple.com>
|
||||||
|
Gregory Tsipenyuk <gtsipenyuk@ripple.com>
|
||||||
|
Howard Hinnant <howard.hinnant@gmail.com>
|
||||||
|
John Freeman <jfreeman08@gmail.com>
|
||||||
|
Mark Travis <mtrippled@users.noreply.github.com>
|
||||||
|
Mayukha Vadari <mvadari@gmail.com>
|
||||||
|
Michael Legleux <mlegleux@ripple.com>
|
||||||
|
Nik Bougalis <nikb@bougalis.net>
|
||||||
|
Olek <115580134+oleks-rip@users.noreply.github.com>
|
||||||
|
Scott Determan <scott.determan@yahoo.com>
|
||||||
|
Snoppy <michaleli@foxmail.com>
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
|
||||||
|
## Version 2.1.1
|
||||||
|
|
||||||
|
The `rippled` 2.1.1 release fixes a critical bug in the integration of AMMs with the payment engine.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
One new amendment is now open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators.
|
||||||
|
|
||||||
|
If you operate an XRP Ledger server, upgrade to version 2.1.1 by April 8, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Amendments
|
||||||
|
|
||||||
|
- **fixAMMOverflowOffer**: Fix improper handling of large synthetic AMM offers in the payment engine. Due to the importance of this fix, the default vote in the source code has been set to YES. For information on how to configure your validator's amendment voting, see [Configure Amendment Voting](https://xrpl.org/docs/infrastructure/configuration/configure-amendment-voting).
|
||||||
|
|
||||||
|
# Introducing XRP Ledger version 2.1.0
|
||||||
|
|
||||||
|
Version 2.1.0 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release adds a bug fix, build improvements, and introduces the `fixNFTokenReserve` and `fixInnerObjTemplate` amendments.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
Two new amendments are now open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators.
|
||||||
|
|
||||||
|
If you operate an XRP Ledger server, upgrade to version 2.1.0 by March 5, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Amendments
|
||||||
|
(These are changes which may impact or be useful to end users. For example, you may be able to update your code/workflow to take advantage of these changes.)
|
||||||
|
|
||||||
|
- **fixNFTokenReserve**: Adds a check to the `NFTokenAcceptOffer` transactor to see if the `OwnerCount` changed. If it did, it checks that the reserve requirement is met. [#4767](https://github.com/XRPLF/rippled/pull/4767)
|
||||||
|
|
||||||
|
- **fixInnerObjTemplate**: Adds an `STObject` constructor overload that includes an additional boolean argument to set the inner object template; currently, the inner object template isn't set upon object creation. In some circumstances, this causes a `tefEXCEPTION` error when trying to access the AMM `sfTradingFee` and `sfDiscountedFee` fields in the inner objects of `sfVoteEntry` and `sfAuctionSlot`. [#4906](https://github.com/XRPLF/rippled/pull/4906)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes and Performance Improvements
|
||||||
|
(These are behind-the-scenes improvements, such as internal changes to the code, which are not expected to impact end users.)
|
||||||
|
|
||||||
|
- Fixed a bug that prevented the gRPC port info from being specified in the `rippled` config file. [#4728](https://github.com/XRPLF/rippled/pull/4728)
|
||||||
|
|
||||||
|
|
||||||
|
### Docs and Build System
|
||||||
|
|
||||||
|
- Added unit tests to check that payees and payers aren't the same account. [#4860](https://github.com/XRPLF/rippled/pull/4860)
|
||||||
|
|
||||||
|
- Removed a workaround that bypassed Windows CI unit test failures. [#4871](https://github.com/XRPLF/rippled/pull/4871)
|
||||||
|
|
||||||
|
- Updated library names to be platform-agnostic in Conan recipes. [#4831](https://github.com/XRPLF/rippled/pull/4831)
|
||||||
|
|
||||||
|
- Added headers required in the Conan package to build xbridge witness servers. [#4885](https://github.com/XRPLF/rippled/pull/4885)
|
||||||
|
|
||||||
|
- Improved object lifetime management when creating a temporary `Rules` object, fixing a crash in Windows unit tests. [#4917](https://github.com/XRPLF/rippled/pull/4917)
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
- Bronek Kozicki <brok@incorrekt.com>
|
||||||
|
- CJ Cobb <cj@axelar.network>
|
||||||
|
- Chenna Keshava B S <21219765+ckeshava@users.noreply.github.com>
|
||||||
|
- Ed Hennis <ed@ripple.com>
|
||||||
|
- Elliot Lee <github.public@intelliot.com>
|
||||||
|
- Gregory Tsipenyuk <gregtatcam@users.noreply.github.com>
|
||||||
|
- John Freeman <jfreeman08@gmail.com>
|
||||||
|
- Michael Legleux <legleux@users.noreply.github.com>
|
||||||
|
- Ryan Molley
|
||||||
|
- Shawn Xie <35279399+shawnxie999@users.noreply.github.com>
|
||||||
|
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
# Introducing XRP Ledger version 2.0.1
|
||||||
|
|
||||||
|
Version 2.0.1 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release includes minor fixes, unit test improvements, and doc updates.
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
If you operate an XRP Ledger server, upgrade to version 2.0.1 to take advantage of the changes included in this update. Nodes on version 1.12 should upgrade as soon as possible.
|
||||||
|
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
(These are changes which may impact or be useful to end users. For example, you may be able to update your code/workflow to take advantage of these changes.)
|
||||||
|
|
||||||
|
- Updated the `send_queue_limit` to 500 in the default `rippled` config to handle increased transaction loads. [#4867](https://github.com/XRPLF/rippled/pull/4867)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes and Performance Improvements
|
||||||
|
(These are behind-the-scenes improvements, such as internal changes to the code, which are not expected to impact end users.)
|
||||||
|
|
||||||
|
- Fixed an assertion that occurred when `rippled` was under heavy websocket client load. [#4848](https://github.com/XRPLF/rippled/pull/4848)
|
||||||
|
|
||||||
|
- Improved lifetime management of serialized type ledger entries to improve memory usage. [#4822](https://github.com/XRPLF/rippled/pull/4822)
|
||||||
|
|
||||||
|
- Fixed a clang warning about deprecated sprintf usage. [#4747](https://github.com/XRPLF/rippled/pull/4747)
|
||||||
|
|
||||||
|
|
||||||
|
### Docs and Build System
|
||||||
|
|
||||||
|
- Added `DeliverMax` to more JSONRPC tests. [#4826](https://github.com/XRPLF/rippled/pull/4826)
|
||||||
|
|
||||||
|
- Updated the pull request template to include a `Type of Change` checkbox and additional contextual questions. [#4875](https://github.com/XRPLF/rippled/pull/4875)
|
||||||
|
|
||||||
|
- Updated help messages for unit tests pattern matching. [#4846](https://github.com/XRPLF/rippled/pull/4846)
|
||||||
|
|
||||||
|
- Improved the time it take to generate coverage reports. [#4849](https://github.com/XRPLF/rippled/pull/4849)
|
||||||
|
|
||||||
|
- Fixed broken links in the Conan build docs. [#4699](https://github.com/XRPLF/rippled/pull/4699)
|
||||||
|
|
||||||
|
- Spurious codecov uploads are now retried if there's an error uploading them the first time. [#4896](https://github.com/XRPLF/rippled/pull/4896)
|
||||||
|
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
- Bronek Kozicki <brok@incorrekt.com>
|
||||||
|
- Chenna Keshava B S <21219765+ckeshava@users.noreply.github.com>
|
||||||
|
- Ed Hennis <ed@ripple.com>
|
||||||
|
- Elliot Lee <github.public@intelliot.com>
|
||||||
|
- Lathan Britz <jucallme@gmail.com>
|
||||||
|
- Mark Travis <mtrippled@users.noreply.github.com>
|
||||||
|
- nixer89 <pbnixer@gmail.com>
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the `rippled` code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
# Introducing XRP Ledger version 2.0.0
|
||||||
|
|
||||||
|
Version 2.0.0 of `rippled`, the reference server implementation of the XRP Ledger protocol, is now available. This release adds new features and bug fixes, and introduces these amendments:
|
||||||
|
|
||||||
|
- `DID`
|
||||||
|
- `XChainBridge`
|
||||||
|
- `fixDisallowIncomingV1`
|
||||||
|
- `fixFillOrKill`
|
||||||
|
|
||||||
|
[Sign Up for Future Release Announcements](https://groups.google.com/g/ripple-server)
|
||||||
|
|
||||||
|
<!-- BREAK -->
|
||||||
|
|
||||||
|
|
||||||
|
## Action Required
|
||||||
|
|
||||||
|
Four new amendments are now open for voting according to the XRP Ledger's [amendment process](https://xrpl.org/amendments.html), which enables protocol changes following two weeks of >80% support from trusted validators.
|
||||||
|
|
||||||
|
If you operate an XRP Ledger server, upgrade to version 2.0.0 by January 22, 2024 to ensure service continuity. The exact time that protocol changes take effect depends on the voting decisions of the decentralized network.
|
||||||
|
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
|
||||||
|
### Amendments, New Features, and Changes
|
||||||
|
(These are changes which may impact or be useful to end users. For example, you may be able to update your code/workflow to take advantage of these changes.)
|
||||||
|
|
||||||
|
- **XChainBridge**: Introduces cross-chain bridges, enabling interoperability between the XRP Ledger and sidechains. [#4292](https://github.com/XRPLF/rippled/pull/4292)
|
||||||
|
|
||||||
|
- **DID**: Introduces decentralized identifiers. [#4636](https://github.com/XRPLF/rippled/pull/4636)
|
||||||
|
|
||||||
|
- **fixDisallowIncomingV1**: Fixes an issue that occurs when users try to authorize a trustline while the `lsfDisallowIncomingTrustline` flag is enabled on their account. [#4721](https://github.com/XRPLF/rippled/pull/4721)
|
||||||
|
|
||||||
|
- **fixFillOrKill**: Fixes an issue introduced in the `flowCross` amendment. The `tfFillOrKill` and `tfSell` flags are now properly handled to allow offers to cross in certain scenarios. [#4694](https://github.com/XRPLF/rippled/pull/4694)
|
||||||
|
|
||||||
|
- **API v2 released with these changes:**
|
||||||
|
|
||||||
|
- Accepts currency codes in ASCII, using the full alphabet. [#4566](https://github.com/XRPLF/rippled/pull/4566)
|
||||||
|
- Added test to verify the `check` field is a string. [#4630](https://github.com/XRPLF/rippled/pull/4630)
|
||||||
|
- Added errors for malformed `account_tx` and `noripple_check` fields. [#4620](https://github.com/XRPLF/rippled/pull/4620)
|
||||||
|
- Added errors for malformed `gateway_balances` and `channel_authorize` requests. [#4618](https://github.com/XRPLF/rippled/pull/4618)
|
||||||
|
- Added a `DeliverMax` alias to `Amount` and removed `Amount`. [#4733](https://github.com/XRPLF/rippled/pull/4733)
|
||||||
|
- Removed `tx_history` and `ledger_header` methods. Also updated `RPC::Handler` to allow for version-specific methods. [#4759](https://github.com/XRPLF/rippled/pull/4759)
|
||||||
|
- Standardized the JSON serialization format of transactions. [#4727](https://github.com/XRPLF/rippled/issues/4727)
|
||||||
|
- Bumped API support to v2, but kept the command-line interface for `rippled` and unit tests at v1. [#4803](https://github.com/XRPLF/rippled/pull/4803)
|
||||||
|
- Standardized `ledger_index` to return as a number. [#4820](https://github.com/XRPLF/rippled/pull/4820)
|
||||||
|
|
||||||
|
- Added a `server_definitions` command that returns an SDK-compatible `definitions.json` file, generated from the `rippled` instance currently running. [#4703](https://github.com/XRPLF/rippled/pull/4703)
|
||||||
|
|
||||||
|
- Improved unit test command line input and run times. [#4634](https://github.com/XRPLF/rippled/pull/4634)
|
||||||
|
|
||||||
|
- Added the link compression setting to the the `rippled-example.cfg` file. [#4753](https://github.com/XRPLF/rippled/pull/4753)
|
||||||
|
|
||||||
|
- Changed the reserved hook error code name from `tecHOOK_ERROR` to `tecHOOK_REJECTED`. [#4559](https://github.com/XRPLF/rippled/pull/4559)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes and Performance Improvements
|
||||||
|
(These are behind-the-scenes improvements, such as internal changes to the code, which are not expected to impact end users.)
|
||||||
|
|
||||||
|
- Simplified `TxFormats` common fields logic. [#4637](https://github.com/XRPLF/rippled/pull/4637)
|
||||||
|
|
||||||
|
- Improved transaction throughput by asynchronously writing batches to *NuDB*. [#4503](https://github.com/XRPLF/rippled/pull/4503)
|
||||||
|
|
||||||
|
- Removed 2 unused functions. [#4708](https://github.com/XRPLF/rippled/pull/4708)
|
||||||
|
|
||||||
|
- Removed an unused variable that caused clang 14 build errors. [#4672](https://github.com/XRPLF/rippled/pull/4672)
|
||||||
|
|
||||||
|
- Fixed comment about return value of `LedgerHistory::fixIndex`. [#4574](https://github.com/XRPLF/rippled/pull/4574)
|
||||||
|
|
||||||
|
- Updated `secp256k1` to 0.3.2. [#4653](https://github.com/XRPLF/rippled/pull/4653)
|
||||||
|
|
||||||
|
- Removed built-in SNTP clock issues. [#4628](https://github.com/XRPLF/rippled/pull/4628)
|
||||||
|
|
||||||
|
- Fixed amendment flapping. This issue usually occurred when an amendment was on the verge of gaining majority, but a validator not in favor of the amendment went offline. [#4410](https://github.com/XRPLF/rippled/pull/4410)
|
||||||
|
|
||||||
|
- Fixed asan stack-use-after-scope issue. [#4676](https://github.com/XRPLF/rippled/pull/4676)
|
||||||
|
|
||||||
|
- Transactions and pseudo-transactions share the same `commonFields` again. [#4715](https://github.com/XRPLF/rippled/pull/4715)
|
||||||
|
|
||||||
|
- Reduced boilerplate in `applySteps.cpp`. When a new transactor is added, only one function needs to be modified now. [#4710](https://github.com/XRPLF/rippled/pull/4710)
|
||||||
|
|
||||||
|
- Removed an incorrect assert. [#4743](https://github.com/XRPLF/rippled/pull/4743)
|
||||||
|
|
||||||
|
- Replaced some asserts in `PeerFinder::Logic` with `LogicError` to better indicate the nature of server crashes. [#4562](https://github.com/XRPLF/rippled/pull/4562)
|
||||||
|
|
||||||
|
- Fixed an issue with enabling new amendments on a network with an ID greater than 1024. [#4737](https://github.com/XRPLF/rippled/pull/4737)
|
||||||
|
|
||||||
|
|
||||||
|
### Docs and Build System
|
||||||
|
|
||||||
|
- Updated `rippled-example.cfg` docs to clarify usage of *ssl_cert* vs *ssl_chain*. [#4667](https://github.com/XRPLF/rippled/pull/4667)
|
||||||
|
|
||||||
|
- Updated `BUILD.md`:
|
||||||
|
- Made the `environment.md` link easier to find. Also made it easier to find platform-specific info. [#4507](https://github.com/XRPLF/rippled/pull/4507)
|
||||||
|
- Fixed typo. [#4718](https://github.com/XRPLF/rippled/pull/4718)
|
||||||
|
- Updated the minimum compiler requirements. [#4700](https://github.com/XRPLF/rippled/pull/4700)
|
||||||
|
- Added note about enabling `XRPFees`. [#4741](https://github.com/XRPLF/rippled/pull/4741)
|
||||||
|
|
||||||
|
- Updated `API-CHANGELOG.md`:
|
||||||
|
- Explained API v2 is releasing with `rippled` 2.0.0. [#4633](https://github.com/XRPLF/rippled/pull/4633)
|
||||||
|
- Clarified the location of the `signer_lists` field in the `account_info` response for API v2. [#4724](https://github.com/XRPLF/rippled/pull/4724)
|
||||||
|
- Added documentation for the new `DeliverMax` field. [#4784](https://github.com/XRPLF/rippled/pull/4784)
|
||||||
|
- Removed references to API v2 being "in progress" and "in beta". [#4828](https://github.com/XRPLF/rippled/pull/4828)
|
||||||
|
- Clarified that all breaking API changes will now occur in API v3 or later. [#4773](https://github.com/XRPLF/rippled/pull/4773)
|
||||||
|
|
||||||
|
- Fixed a mistake in the overlay README. [#4635](https://github.com/XRPLF/rippled/pull/4635)
|
||||||
|
|
||||||
|
- Fixed an early return from `RippledRelease.cmake` that prevented targets from being created during packaging. [#4707](https://github.com/XRPLF/rippled/pull/4707)
|
||||||
|
|
||||||
|
- Fixed a build error with Intel Macs. [#4632](https://github.com/XRPLF/rippled/pull/4632)
|
||||||
|
|
||||||
|
- Added `.build` to `.gitignore`. [#4722](https://github.com/XRPLF/rippled/pull/4722)
|
||||||
|
|
||||||
|
- Fixed a `uint is not universally defined` Windows build error. [#4731](https://github.com/XRPLF/rippled/pull/4731)
|
||||||
|
|
||||||
|
- Reenabled Windows CI build with Artifactory support. [#4596](https://github.com/XRPLF/rippled/pull/4596)
|
||||||
|
|
||||||
|
- Fixed output of remote step in Nix workflow. [#4746](https://github.com/XRPLF/rippled/pull/4746)
|
||||||
|
|
||||||
|
- Fixed a broken link in `conan.md`. [#4740](https://github.com/XRPLF/rippled/pull/4740)
|
||||||
|
|
||||||
|
- Added a `python` call to fix the `pip` upgrade command in Windows CI. [#4768](https://github.com/XRPLF/rippled/pull/4768)
|
||||||
|
|
||||||
|
- Added an API Impact section to `pull_request_template.md`. [#4757](https://github.com/XRPLF/rippled/pull/4757)
|
||||||
|
|
||||||
|
- Set permissions for the Doxygen workflow. [#4756](https://github.com/XRPLF/rippled/pull/4756)
|
||||||
|
|
||||||
|
- Switched to Unity builds to speed up Windows CI. [#4780](https://github.com/XRPLF/rippled/pull/4780)
|
||||||
|
|
||||||
|
- Clarified what makes consensus healthy in `FeeEscalation.md`. [#4729](https://github.com/XRPLF/rippled/pull/4729)
|
||||||
|
|
||||||
|
- Removed a dependency on the <ranges> header for unit tests. [#4788](https://github.com/XRPLF/rippled/pull/4788)
|
||||||
|
|
||||||
|
- Fixed a clang `unused-but-set-variable` warning. [#4677](https://github.com/XRPLF/rippled/pull/4677)
|
||||||
|
|
||||||
|
- Removed an unused Dockerfile. [#4791](https://github.com/XRPLF/rippled/pull/4791)
|
||||||
|
|
||||||
|
- Fixed unit tests to work with API v2. [#4785](https://github.com/XRPLF/rippled/pull/4785)
|
||||||
|
|
||||||
|
- Added support for the mold linker on Linux. [#4807](https://github.com/XRPLF/rippled/pull/4807)
|
||||||
|
|
||||||
|
- Updated Linux distribtuions `rippled` smoke tests run on. [#4813](https://github.com/XRPLF/rippled/pull/4813)
|
||||||
|
|
||||||
|
- Added codename `bookworm` to the distribution matrix during Artifactory uploads, enabling Debian 12 clients to install `rippled` packages. [#4836](https://github.com/XRPLF/rippled/pull/4836)
|
||||||
|
|
||||||
|
- Added a workaround for compilation errors with GCC 13 and other compilers relying on libstdc++ version 13. [#4817](https://github.com/XRPLF/rippled/pull/4817)
|
||||||
|
|
||||||
|
- Fixed a minor typo in the code comments of `AMMCreate.h`. [4821](https://github.com/XRPLF/rippled/pull/4821)
|
||||||
|
|
||||||
|
|
||||||
|
### GitHub
|
||||||
|
|
||||||
|
The public source code repository for `rippled` is hosted on GitHub at <https://github.com/XRPLF/rippled>.
|
||||||
|
|
||||||
|
We welcome all contributions and invite everyone to join the community of XRP Ledger developers to help build the Internet of Value.
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
The following people contributed directly to this release:
|
||||||
|
|
||||||
|
- Bronek Kozicki <brok@incorrekt.com>
|
||||||
|
- Chenna Keshava B S <21219765+ckeshava@users.noreply.github.com>
|
||||||
|
- Denis Angell <dangell@transia.co>
|
||||||
|
- Ed Hennis <ed@ripple.com>
|
||||||
|
- Elliot Lee <github.public@intelliot.com>
|
||||||
|
- Florent <36513774+florent-uzio@users.noreply.github.com>
|
||||||
|
- ForwardSlashBack <142098649+ForwardSlashBack@users.noreply.github.com>
|
||||||
|
- Gregory Tsipenyuk <gregtatcam@users.noreply.github.com>
|
||||||
|
- Howard Hinnant <howard.hinnant@gmail.com>
|
||||||
|
- Hussein Badakhchani <husseinb01@gmail.com>
|
||||||
|
- Jackson Mills <aim4math@gmail.com>
|
||||||
|
- John Freeman <jfreeman08@gmail.com>
|
||||||
|
- Manoj Doshi <mdoshi@ripple.com>
|
||||||
|
- Mark Pevec <mark.pevec@gmail.com>
|
||||||
|
- Mark Travis <mtrippled@users.noreply.github.com>
|
||||||
|
- Mayukha Vadari <mvadari@gmail.com>
|
||||||
|
- Michael Legleux <legleux@users.noreply.github.com>
|
||||||
|
- Nik Bougalis <nikb@bougalis.net>
|
||||||
|
- Peter Chen <34582813+PeterChen13579@users.noreply.github.com>
|
||||||
|
- Rome Reginelli <rome@ripple.com>
|
||||||
|
- Scott Determan <scott.determan@yahoo.com>
|
||||||
|
- Scott Schurr <scott@ripple.com>
|
||||||
|
- Sophia Xie <106177003+sophiax851@users.noreply.github.com>
|
||||||
|
- Stefan van Kessel <van_kessel@freenet.de>
|
||||||
|
- pwang200 <354723+pwang200@users.noreply.github.com>
|
||||||
|
- shichengsg002 <147461171+shichengsg002@users.noreply.github.com>
|
||||||
|
- sokkaofthewatertribe <140777955+sokkaofthewatertribe@users.noreply.github.com>
|
||||||
|
|
||||||
|
Bug Bounties and Responsible Disclosures:
|
||||||
|
|
||||||
|
We welcome reviews of the rippled code and urge researchers to responsibly disclose any issues they may find.
|
||||||
|
|
||||||
|
To report a bug, please send a detailed report to: <bugs@xrpl.org>
|
||||||
|
|
||||||
|
|
||||||
# Introducing XRP Ledger version 1.12.0
|
# Introducing XRP Ledger version 1.12.0
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ To report a qualifying bug, please send a detailed report to:
|
|||||||
|Long Key ID | `0xCD49A0AFC57929BE` |
|
|Long Key ID | `0xCD49A0AFC57929BE` |
|
||||||
|Fingerprint | `24E6 3B02 37E0 FA9C 5E96 8974 CD49 A0AF C579 29BE` |
|
|Fingerprint | `24E6 3B02 37E0 FA9C 5E96 8974 CD49 A0AF C579 29BE` |
|
||||||
|
|
||||||
The full PGP key for this address, which is also available on several key servers (e.g. on [keys.gnupg.net](https://keys.gnupg.net)), is:
|
The full PGP key for this address, which is also available on several key servers (e.g. on [keyserver.ubuntu.com](https://keyserver.ubuntu.com)), is:
|
||||||
```
|
```
|
||||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
mQINBFUwGHYBEAC0wpGpBPkd8W1UdQjg9+cEFzeIEJRaoZoeuJD8mofwI5Ejnjdt
|
mQINBFUwGHYBEAC0wpGpBPkd8W1UdQjg9+cEFzeIEJRaoZoeuJD8mofwI5Ejnjdt
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
In this directory are two scripts, `build.sh` and `test.sh` used for building
|
|
||||||
and testing rippled.
|
|
||||||
|
|
||||||
(For now, they assume Bash and Linux. Once I get Windows containers for
|
|
||||||
testing, I'll try them there, but if Bash is not available, then they will
|
|
||||||
soon be joined by PowerShell scripts `build.ps` and `test.ps`.)
|
|
||||||
|
|
||||||
We don't want these scripts to require arcane invocations that can only be
|
|
||||||
pieced together from within a CI configuration. We want something that humans
|
|
||||||
can easily invoke, read, and understand, for when we eventually have to test
|
|
||||||
and debug them interactively. That means:
|
|
||||||
|
|
||||||
(1) They should work with no arguments.
|
|
||||||
(2) They should document their arguments.
|
|
||||||
(3) They should expand short arguments into long arguments.
|
|
||||||
|
|
||||||
While we want to provide options for common use cases, we don't need to offer
|
|
||||||
the kitchen sink. We can rightfully expect users with esoteric, complicated
|
|
||||||
needs to write their own scripts.
|
|
||||||
|
|
||||||
To make argument-handling easy for us, the implementers, we can just take all
|
|
||||||
arguments from environment variables. They have the nice advantage that every
|
|
||||||
command-line uses named arguments. For the benefit of us and our users, we
|
|
||||||
document those variables at the top of each script.
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o xtrace
|
|
||||||
set -o errexit
|
|
||||||
|
|
||||||
# The build system. Either 'Unix Makefiles' or 'Ninja'.
|
|
||||||
GENERATOR=${GENERATOR:-Unix Makefiles}
|
|
||||||
# The compiler. Either 'gcc' or 'clang'.
|
|
||||||
COMPILER=${COMPILER:-gcc}
|
|
||||||
# The build type. Either 'Debug' or 'Release'.
|
|
||||||
BUILD_TYPE=${BUILD_TYPE:-Debug}
|
|
||||||
# Additional arguments to CMake.
|
|
||||||
# We use the `-` substitution here instead of `:-` so that callers can erase
|
|
||||||
# the default by setting `$CMAKE_ARGS` to the empty string.
|
|
||||||
CMAKE_ARGS=${CMAKE_ARGS-'-Dwerr=ON'}
|
|
||||||
|
|
||||||
# https://gitlab.kitware.com/cmake/cmake/issues/18865
|
|
||||||
CMAKE_ARGS="-DBoost_NO_BOOST_CMAKE=ON ${CMAKE_ARGS}"
|
|
||||||
|
|
||||||
if [[ ${COMPILER} == 'gcc' ]]; then
|
|
||||||
export CC='gcc'
|
|
||||||
export CXX='g++'
|
|
||||||
elif [[ ${COMPILER} == 'clang' ]]; then
|
|
||||||
export CC='clang'
|
|
||||||
export CXX='clang++'
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake -G "${GENERATOR}" -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${CMAKE_ARGS} ..
|
|
||||||
cmake --build . -- -j $(nproc)
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -o xtrace
|
|
||||||
set -o errexit
|
|
||||||
|
|
||||||
# Set to 'true' to run the known "manual" tests in rippled.
|
|
||||||
MANUAL_TESTS=${MANUAL_TESTS:-false}
|
|
||||||
# The maximum number of concurrent tests.
|
|
||||||
CONCURRENT_TESTS=${CONCURRENT_TESTS:-$(nproc)}
|
|
||||||
# The path to rippled.
|
|
||||||
RIPPLED=${RIPPLED:-build/rippled}
|
|
||||||
# Additional arguments to rippled.
|
|
||||||
RIPPLED_ARGS=${RIPPLED_ARGS:-}
|
|
||||||
|
|
||||||
function join_by { local IFS="$1"; shift; echo "$*"; }
|
|
||||||
|
|
||||||
declare -a manual_tests=(
|
|
||||||
'beast.chrono.abstract_clock'
|
|
||||||
'beast.unit_test.print'
|
|
||||||
'ripple.NodeStore.Timing'
|
|
||||||
'ripple.app.Flow_manual'
|
|
||||||
'ripple.app.NoRippleCheckLimits'
|
|
||||||
'ripple.app.PayStrandAllPairs'
|
|
||||||
'ripple.consensus.ByzantineFailureSim'
|
|
||||||
'ripple.consensus.DistributedValidators'
|
|
||||||
'ripple.consensus.ScaleFreeSim'
|
|
||||||
'ripple.tx.CrossingLimits'
|
|
||||||
'ripple.tx.FindOversizeCross'
|
|
||||||
'ripple.tx.Offer_manual'
|
|
||||||
'ripple.tx.OversizeMeta'
|
|
||||||
'ripple.tx.PlumpBook'
|
|
||||||
)
|
|
||||||
|
|
||||||
if [[ ${MANUAL_TESTS} == 'true' ]]; then
|
|
||||||
RIPPLED_ARGS+=" --unittest=$(join_by , "${manual_tests[@]}")"
|
|
||||||
else
|
|
||||||
RIPPLED_ARGS+=" --unittest --quiet --unittest-log"
|
|
||||||
fi
|
|
||||||
RIPPLED_ARGS+=" --unittest-jobs ${CONCURRENT_TESTS}"
|
|
||||||
|
|
||||||
${RIPPLED} ${RIPPLED_ARGS}
|
|
||||||
@@ -1,274 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -ex
|
|
||||||
|
|
||||||
function version_ge() { test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"; }
|
|
||||||
|
|
||||||
__dirname=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
||||||
echo "using CC: ${CC}"
|
|
||||||
"${CC}" --version
|
|
||||||
export CC
|
|
||||||
|
|
||||||
COMPNAME=$(basename $CC)
|
|
||||||
echo "using CXX: ${CXX:-notset}"
|
|
||||||
if [[ $CXX ]]; then
|
|
||||||
"${CXX}" --version
|
|
||||||
export CXX
|
|
||||||
fi
|
|
||||||
: ${BUILD_TYPE:=Debug}
|
|
||||||
echo "BUILD TYPE: ${BUILD_TYPE}"
|
|
||||||
|
|
||||||
: ${TARGET:=install}
|
|
||||||
echo "BUILD TARGET: ${TARGET}"
|
|
||||||
|
|
||||||
JOBS=${NUM_PROCESSORS:-2}
|
|
||||||
if [[ ${TRAVIS:-false} != "true" ]]; then
|
|
||||||
JOBS=$((JOBS+1))
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z "${CMAKE_EXE:-}" ]] ; then
|
|
||||||
export PATH="$(dirname ${CMAKE_EXE}):$PATH"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -x /usr/bin/time ] ; then
|
|
||||||
: ${TIME:="Duration: %E"}
|
|
||||||
export TIME
|
|
||||||
time=/usr/bin/time
|
|
||||||
else
|
|
||||||
time=
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Building rippled"
|
|
||||||
: ${CMAKE_EXTRA_ARGS:=""}
|
|
||||||
if [[ ${NINJA_BUILD:-} == true ]]; then
|
|
||||||
CMAKE_EXTRA_ARGS+=" -G Ninja"
|
|
||||||
fi
|
|
||||||
|
|
||||||
coverage=false
|
|
||||||
if [[ "${TARGET}" == "coverage_report" ]] ; then
|
|
||||||
echo "coverage option detected."
|
|
||||||
coverage=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
cmake --version
|
|
||||||
CMAKE_VER=$(cmake --version | cut -d " " -f 3 | head -1)
|
|
||||||
|
|
||||||
#
|
|
||||||
# allow explicit setting of the name of the build
|
|
||||||
# dir, otherwise default to the compiler.build_type
|
|
||||||
#
|
|
||||||
: "${BUILD_DIR:=${COMPNAME}.${BUILD_TYPE}}"
|
|
||||||
BUILDARGS="--target ${TARGET}"
|
|
||||||
BUILDTOOLARGS=""
|
|
||||||
if version_ge $CMAKE_VER "3.12.0" ; then
|
|
||||||
BUILDARGS+=" --parallel"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${NINJA_BUILD:-} == false ]]; then
|
|
||||||
if version_ge $CMAKE_VER "3.12.0" ; then
|
|
||||||
BUILDARGS+=" ${JOBS}"
|
|
||||||
else
|
|
||||||
BUILDTOOLARGS+=" -j ${JOBS}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${VERBOSE_BUILD:-} == true ]]; then
|
|
||||||
CMAKE_EXTRA_ARGS+=" -DCMAKE_VERBOSE_MAKEFILE=ON"
|
|
||||||
if version_ge $CMAKE_VER "3.14.0" ; then
|
|
||||||
BUILDARGS+=" --verbose"
|
|
||||||
else
|
|
||||||
if [[ ${NINJA_BUILD:-} == false ]]; then
|
|
||||||
BUILDTOOLARGS+=" verbose=1"
|
|
||||||
else
|
|
||||||
BUILDTOOLARGS+=" -v"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${USE_CCACHE:-} == true ]]; then
|
|
||||||
echo "using ccache with basedir [${CCACHE_BASEDIR:-}]"
|
|
||||||
CMAKE_EXTRA_ARGS+=" -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache"
|
|
||||||
fi
|
|
||||||
if [ -d "build/${BUILD_DIR}" ]; then
|
|
||||||
rm -rf "build/${BUILD_DIR}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "build/${BUILD_DIR}"
|
|
||||||
pushd "build/${BUILD_DIR}"
|
|
||||||
|
|
||||||
# cleanup possible artifacts
|
|
||||||
rm -fv CMakeFiles/CMakeOutput.log CMakeFiles/CMakeError.log
|
|
||||||
# Clean up NIH directories which should be git repos, but aren't
|
|
||||||
for nih_path in ${NIH_CACHE_ROOT}/*/*/*/src ${NIH_CACHE_ROOT}/*/*/src
|
|
||||||
do
|
|
||||||
for dir in lz4 snappy rocksdb
|
|
||||||
do
|
|
||||||
if [ -e ${nih_path}/${dir} -a \! -e ${nih_path}/${dir}/.git ]
|
|
||||||
then
|
|
||||||
ls -la ${nih_path}/${dir}*
|
|
||||||
rm -rfv ${nih_path}/${dir}*
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
# generate
|
|
||||||
${time} cmake ../.. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ${CMAKE_EXTRA_ARGS}
|
|
||||||
# Display the cmake output, to help with debugging if something fails
|
|
||||||
for file in CMakeOutput.log CMakeError.log
|
|
||||||
do
|
|
||||||
if [ -f CMakeFiles/${file} ]
|
|
||||||
then
|
|
||||||
ls -l CMakeFiles/${file}
|
|
||||||
cat CMakeFiles/${file}
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
# build
|
|
||||||
export DESTDIR=$(pwd)/_INSTALLED_
|
|
||||||
|
|
||||||
${time} eval cmake --build . ${BUILDARGS} -- ${BUILDTOOLARGS}
|
|
||||||
|
|
||||||
if [[ ${TARGET} == "docs" ]]; then
|
|
||||||
## mimic the standard test output for docs build
|
|
||||||
## to make controlling processes like jenkins happy
|
|
||||||
if [ -f docs/html/index.html ]; then
|
|
||||||
echo "1 case, 1 test total, 0 failures"
|
|
||||||
else
|
|
||||||
echo "1 case, 1 test total, 1 failures"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
popd
|
|
||||||
|
|
||||||
if [[ "${TARGET}" == "validator-keys" ]] ; then
|
|
||||||
export APP_PATH="$PWD/build/${BUILD_DIR}/validator-keys/validator-keys"
|
|
||||||
else
|
|
||||||
export APP_PATH="$PWD/build/${BUILD_DIR}/rippled"
|
|
||||||
fi
|
|
||||||
echo "using APP_PATH: ${APP_PATH}"
|
|
||||||
|
|
||||||
# See what we've actually built
|
|
||||||
ldd ${APP_PATH}
|
|
||||||
|
|
||||||
: ${APP_ARGS:=}
|
|
||||||
|
|
||||||
if [[ "${TARGET}" == "validator-keys" ]] ; then
|
|
||||||
APP_ARGS="--unittest"
|
|
||||||
else
|
|
||||||
function join_by { local IFS="$1"; shift; echo "$*"; }
|
|
||||||
|
|
||||||
# This is a list of manual tests
|
|
||||||
# in rippled that we want to run
|
|
||||||
# ORDER matters here...sorted in approximately
|
|
||||||
# descending execution time (longest running tests at top)
|
|
||||||
declare -a manual_tests=(
|
|
||||||
'ripple.ripple_data.reduce_relay_simulate'
|
|
||||||
'ripple.tx.Offer_manual'
|
|
||||||
'ripple.tx.CrossingLimits'
|
|
||||||
'ripple.tx.PlumpBook'
|
|
||||||
'ripple.app.Flow_manual'
|
|
||||||
'ripple.tx.OversizeMeta'
|
|
||||||
'ripple.consensus.DistributedValidators'
|
|
||||||
'ripple.app.NoRippleCheckLimits'
|
|
||||||
'ripple.ripple_data.compression'
|
|
||||||
'ripple.NodeStore.Timing'
|
|
||||||
'ripple.consensus.ByzantineFailureSim'
|
|
||||||
'beast.chrono.abstract_clock'
|
|
||||||
'beast.unit_test.print'
|
|
||||||
)
|
|
||||||
if [[ ${TRAVIS:-false} != "true" ]]; then
|
|
||||||
# these two tests cause travis CI to run out of memory.
|
|
||||||
# TODO: investigate possible workarounds.
|
|
||||||
manual_tests=(
|
|
||||||
'ripple.consensus.ScaleFreeSim'
|
|
||||||
'ripple.tx.FindOversizeCross'
|
|
||||||
"${manual_tests[@]}"
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${MANUAL_TESTS:-} == true ]]; then
|
|
||||||
APP_ARGS+=" --unittest=$(join_by , "${manual_tests[@]}")"
|
|
||||||
else
|
|
||||||
APP_ARGS+=" --unittest --quiet --unittest-log"
|
|
||||||
fi
|
|
||||||
if [[ ${coverage} == false && ${PARALLEL_TESTS:-} == true ]]; then
|
|
||||||
APP_ARGS+=" --unittest-jobs ${JOBS}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${IPV6_TESTS:-} == true ]]; then
|
|
||||||
APP_ARGS+=" --unittest-ipv6"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${coverage} == true && $CC =~ ^gcc ]]; then
|
|
||||||
# Push the results (lcov.info) to codecov
|
|
||||||
codecov -X gcov # don't even try and look for .gcov files ;)
|
|
||||||
find . -name "*.gcda" | xargs rm -f
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${SKIP_TESTS:-} == true ]]; then
|
|
||||||
echo "skipping tests."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
ulimit -a
|
|
||||||
corepat=$(cat /proc/sys/kernel/core_pattern)
|
|
||||||
if [[ ${corepat} =~ ^[:space:]*\| ]] ; then
|
|
||||||
echo "WARNING: core pattern is piping - can't search for core files"
|
|
||||||
look_core=false
|
|
||||||
else
|
|
||||||
look_core=true
|
|
||||||
coredir=$(dirname ${corepat})
|
|
||||||
fi
|
|
||||||
if [[ ${look_core} == true ]]; then
|
|
||||||
before=$(ls -A1 ${coredir})
|
|
||||||
fi
|
|
||||||
|
|
||||||
set +e
|
|
||||||
echo "Running tests for ${APP_PATH}"
|
|
||||||
if [[ ${MANUAL_TESTS:-} == true && ${PARALLEL_TESTS:-} != true ]]; then
|
|
||||||
for t in "${manual_tests[@]}" ; do
|
|
||||||
${APP_PATH} --unittest=${t}
|
|
||||||
TEST_STAT=$?
|
|
||||||
if [[ $TEST_STAT -ne 0 ]] ; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
${APP_PATH} ${APP_ARGS}
|
|
||||||
TEST_STAT=$?
|
|
||||||
fi
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ ${look_core} == true ]]; then
|
|
||||||
after=$(ls -A1 ${coredir})
|
|
||||||
oIFS="${IFS}"
|
|
||||||
IFS=$'\n\r'
|
|
||||||
found_core=false
|
|
||||||
for l in $(diff -w --suppress-common-lines <(echo "$before") <(echo "$after")) ; do
|
|
||||||
if [[ "$l" =~ ^[[:space:]]*\>[[:space:]]*(.+)$ ]] ; then
|
|
||||||
corefile="${BASH_REMATCH[1]}"
|
|
||||||
echo "FOUND core dump file at '${coredir}/${corefile}'"
|
|
||||||
gdb_output=$(/bin/mktemp /tmp/gdb_output_XXXXXXXXXX.txt)
|
|
||||||
found_core=true
|
|
||||||
gdb \
|
|
||||||
-ex "set height 0" \
|
|
||||||
-ex "set logging file ${gdb_output}" \
|
|
||||||
-ex "set logging on" \
|
|
||||||
-ex "print 'ripple::BuildInfo::versionString'" \
|
|
||||||
-ex "thread apply all backtrace full" \
|
|
||||||
-ex "info inferiors" \
|
|
||||||
-ex quit \
|
|
||||||
"$APP_PATH" \
|
|
||||||
"${coredir}/${corefile}" &> /dev/null
|
|
||||||
|
|
||||||
echo -e "CORE INFO: \n\n $(cat ${gdb_output}) \n\n)"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="${oIFS}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${found_core} == true ]]; then
|
|
||||||
exit -1
|
|
||||||
else
|
|
||||||
exit $TEST_STAT
|
|
||||||
fi
|
|
||||||
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# run our build script in a docker container
|
|
||||||
# using travis-ci hosts
|
|
||||||
set -eux
|
|
||||||
|
|
||||||
function join_by { local IFS="$1"; shift; echo "$*"; }
|
|
||||||
|
|
||||||
set +x
|
|
||||||
echo "VERBOSE_BUILD=true" > /tmp/co.env
|
|
||||||
matchers=(
|
|
||||||
'TRAVIS.*' 'CI' 'CC' 'CXX'
|
|
||||||
'BUILD_TYPE' 'TARGET' 'MAX_TIME'
|
|
||||||
'CODECOV.+' 'CMAKE.*' '.+_TESTS'
|
|
||||||
'.+_OPTIONS' 'NINJA.*' 'NUM_.+'
|
|
||||||
'NIH_.+' 'BOOST.*' '.*CCACHE.*')
|
|
||||||
|
|
||||||
matchstring=$(join_by '|' "${matchers[@]}")
|
|
||||||
echo "MATCHSTRING IS:: $matchstring"
|
|
||||||
env | grep -E "^(${matchstring})=" >> /tmp/co.env
|
|
||||||
set -x
|
|
||||||
# need to eliminate TRAVIS_CMD...don't want to pass it to the container
|
|
||||||
cat /tmp/co.env | grep -v TRAVIS_CMD > /tmp/co.env.2
|
|
||||||
mv /tmp/co.env.2 /tmp/co.env
|
|
||||||
cat /tmp/co.env
|
|
||||||
mkdir -p -m 0777 ${TRAVIS_BUILD_DIR}/cores
|
|
||||||
echo "${TRAVIS_BUILD_DIR}/cores/%e.%p" | sudo tee /proc/sys/kernel/core_pattern
|
|
||||||
docker run \
|
|
||||||
-t --env-file /tmp/co.env \
|
|
||||||
-v ${TRAVIS_HOME}:${TRAVIS_HOME} \
|
|
||||||
-w ${TRAVIS_BUILD_DIR} \
|
|
||||||
--cap-add SYS_PTRACE \
|
|
||||||
--ulimit "core=-1" \
|
|
||||||
$DOCKER_IMAGE \
|
|
||||||
/bin/bash -c 'if [[ $CC =~ ([[:alpha:]]+)-([[:digit:].]+) ]] ; then sudo update-alternatives --set ${BASH_REMATCH[1]} /usr/bin/$CC; fi; bin/ci/ubuntu/build-and-test.sh'
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# some cached files create churn, so save them here for
|
|
||||||
# later restoration before packing the cache
|
|
||||||
set -eux
|
|
||||||
clean_cache="travis_clean_cache"
|
|
||||||
if [[ ! ( "${TRAVIS_JOB_NAME}" =~ "windows" || \
|
|
||||||
"${TRAVIS_JOB_NAME}" =~ "prereq-keep" ) ]] && \
|
|
||||||
( [[ "${TRAVIS_COMMIT_MESSAGE}" =~ "${clean_cache}" ]] || \
|
|
||||||
( [[ -v TRAVIS_PULL_REQUEST_SHA && \
|
|
||||||
"${TRAVIS_PULL_REQUEST_SHA}" != "" ]] && \
|
|
||||||
git log -1 "${TRAVIS_PULL_REQUEST_SHA}" | grep -cq "${clean_cache}" -
|
|
||||||
)
|
|
||||||
)
|
|
||||||
then
|
|
||||||
find ${TRAVIS_HOME}/_cache -maxdepth 2 -type d
|
|
||||||
rm -rf ${TRAVIS_HOME}/_cache
|
|
||||||
mkdir -p ${TRAVIS_HOME}/_cache
|
|
||||||
fi
|
|
||||||
|
|
||||||
pushd ${TRAVIS_HOME}
|
|
||||||
if [ -f cache_ignore.tar ] ; then
|
|
||||||
rm -f cache_ignore.tar
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d _cache/nih_c ] ; then
|
|
||||||
find _cache/nih_c -name "build.ninja" | tar rf cache_ignore.tar --files-from -
|
|
||||||
find _cache/nih_c -name ".ninja_deps" | tar rf cache_ignore.tar --files-from -
|
|
||||||
find _cache/nih_c -name ".ninja_log" | tar rf cache_ignore.tar --files-from -
|
|
||||||
find _cache/nih_c -name "*.log" | tar rf cache_ignore.tar --files-from -
|
|
||||||
find _cache/nih_c -name "*.tlog" | tar rf cache_ignore.tar --files-from -
|
|
||||||
# show .a files in the cache, for sanity checking
|
|
||||||
find _cache/nih_c -name "*.a" -ls
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d _cache/ccache ] ; then
|
|
||||||
find _cache/ccache -name "stats" | tar rf cache_ignore.tar --files-from -
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f cache_ignore.tar ] ; then
|
|
||||||
tar -tf cache_ignore.tar
|
|
||||||
fi
|
|
||||||
popd
|
|
||||||
|
|
||||||
|
|
||||||
86
bin/git/setup-upstreams.sh
Executable file
86
bin/git/setup-upstreams.sh
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ $# -ne 1 || "$1" == "--help" || "$1" == "-h" ]]
|
||||||
|
then
|
||||||
|
name=$( basename $0 )
|
||||||
|
cat <<- USAGE
|
||||||
|
Usage: $name <username>
|
||||||
|
|
||||||
|
Where <username> is the Github username of the upstream repo. e.g. XRPLF
|
||||||
|
USAGE
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create upstream remotes based on origin
|
||||||
|
shift
|
||||||
|
user="$1"
|
||||||
|
# Get the origin URL. Expect it be an SSH-style URL
|
||||||
|
origin=$( git remote get-url origin )
|
||||||
|
if [[ "${origin}" == "" ]]
|
||||||
|
then
|
||||||
|
echo Invalid origin remote >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# echo "Origin: ${origin}"
|
||||||
|
# Parse the origin
|
||||||
|
ifs_orig="${IFS}"
|
||||||
|
IFS=':' read remote originpath <<< "${origin}"
|
||||||
|
# echo "Remote: ${remote}, Originpath: ${originpath}"
|
||||||
|
IFS='@' read sshuser server <<< "${remote}"
|
||||||
|
# echo "SSHUser: ${sshuser}, Server: ${server}"
|
||||||
|
IFS='/' read originuser repo <<< "${originpath}"
|
||||||
|
# echo "Originuser: ${originuser}, Repo: ${repo}"
|
||||||
|
if [[ "${sshuser}" == "" || "${server}" == "" || "${originuser}" == ""
|
||||||
|
|| "${repo}" == "" ]]
|
||||||
|
then
|
||||||
|
echo "Can't parse origin URL: ${origin}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
upstream="https://${server}/${user}/${repo}"
|
||||||
|
upstreampush="${remote}:${user}/${repo}"
|
||||||
|
upstreamgroup="upstream upstream-push"
|
||||||
|
current=$( git remote get-url upstream 2>/dev/null )
|
||||||
|
currentpush=$( git remote get-url upstream-push 2>/dev/null )
|
||||||
|
currentgroup=$( git config remotes.upstreams )
|
||||||
|
if [[ "${current}" == "${upstream}" ]]
|
||||||
|
then
|
||||||
|
echo "Upstream already set up correctly. Skip"
|
||||||
|
elif [[ -n "${current}" && "${current}" != "${upstream}" &&
|
||||||
|
"${current}" != "${upstreampush}" ]]
|
||||||
|
then
|
||||||
|
echo "Upstream already set up as: ${current}. Skip"
|
||||||
|
else
|
||||||
|
if [[ "${current}" == "${upstreampush}" ]]
|
||||||
|
then
|
||||||
|
echo "Upstream set to dangerous push URL. Update."
|
||||||
|
_run git remote rename upstream upstream-push || \
|
||||||
|
_run git remote remove upstream
|
||||||
|
currentpush=$( git remote get-url upstream-push 2>/dev/null )
|
||||||
|
fi
|
||||||
|
_run git remote add upstream "${upstream}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${currentpush}" == "${upstreampush}" ]]
|
||||||
|
then
|
||||||
|
echo "upstream-push already set up correctly. Skip"
|
||||||
|
elif [[ -n "${currentpush}" && "${currentpush}" != "${upstreampush}" ]]
|
||||||
|
then
|
||||||
|
echo "upstream-push already set up as: ${currentpush}. Skip"
|
||||||
|
else
|
||||||
|
_run git remote add upstream-push "${upstreampush}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${currentgroup}" == "${upstreamgroup}" ]]
|
||||||
|
then
|
||||||
|
echo "Upstreams group already set up correctly. Skip"
|
||||||
|
elif [[ -n "${currentgroup}" && "${currentgroup}" != "${upstreamgroup}" ]]
|
||||||
|
then
|
||||||
|
echo "Upstreams group already set up as: ${currentgroup}. Skip"
|
||||||
|
else
|
||||||
|
_run git config --add remotes.upstreams "${upstreamgroup}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
_run git fetch --jobs=$(nproc) upstreams
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
69
bin/git/squash-branches.sh
Executable file
69
bin/git/squash-branches.sh
Executable file
@@ -0,0 +1,69 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ $# -lt 3 || "$1" == "--help" || "$1" = "-h" ]]
|
||||||
|
then
|
||||||
|
name=$( basename $0 )
|
||||||
|
cat <<- USAGE
|
||||||
|
Usage: $name workbranch base/branch user/branch [user/branch [...]]
|
||||||
|
|
||||||
|
* workbranch will be created locally from base/branch
|
||||||
|
* base/branch and user/branch may be specified as user:branch to allow
|
||||||
|
easy copying from Github PRs
|
||||||
|
* Remotes for each user must already be set up
|
||||||
|
USAGE
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
work="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
branches=( $( echo "${@}" | sed "s/:/\//" ) )
|
||||||
|
base="${branches[0]}"
|
||||||
|
unset branches[0]
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
users=()
|
||||||
|
for b in "${branches[@]}"
|
||||||
|
do
|
||||||
|
users+=( $( echo $b | cut -d/ -f1 ) )
|
||||||
|
done
|
||||||
|
|
||||||
|
users=( $( printf '%s\n' "${users[@]}" | sort -u ) )
|
||||||
|
|
||||||
|
git fetch --multiple upstreams "${users[@]}"
|
||||||
|
git checkout -B "$work" --no-track "$base"
|
||||||
|
|
||||||
|
for b in "${branches[@]}"
|
||||||
|
do
|
||||||
|
git merge --squash "${b}"
|
||||||
|
git commit -S # Use the commit message provided on the PR
|
||||||
|
done
|
||||||
|
|
||||||
|
# Make sure the commits look right
|
||||||
|
git log --show-signature "$base..HEAD"
|
||||||
|
|
||||||
|
parts=( $( echo $base | sed "s/\// /" ) )
|
||||||
|
repo="${parts[0]}"
|
||||||
|
b="${parts[1]}"
|
||||||
|
push=$repo
|
||||||
|
if [[ "$push" == "upstream" ]]
|
||||||
|
then
|
||||||
|
push="upstream-push"
|
||||||
|
fi
|
||||||
|
if [[ "$repo" == "upstream" ]]
|
||||||
|
then
|
||||||
|
repo="upstreams"
|
||||||
|
fi
|
||||||
|
cat << PUSH
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
This script will not push. Verify everything is correct, then push
|
||||||
|
to your repo, and create a PR if necessary. Once the PR is approved,
|
||||||
|
run:
|
||||||
|
|
||||||
|
git push $push HEAD:$b
|
||||||
|
git fetch $repo
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
PUSH
|
||||||
|
|
||||||
58
bin/git/update-version.sh
Executable file
58
bin/git/update-version.sh
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ $# -ne 3 || "$1" == "--help" || "$1" = "-h" ]]
|
||||||
|
then
|
||||||
|
name=$( basename $0 )
|
||||||
|
cat <<- USAGE
|
||||||
|
Usage: $name workbranch base/branch version
|
||||||
|
|
||||||
|
* workbranch will be created locally from base/branch. If it exists,
|
||||||
|
it will be reused, so make sure you don't overwrite any work.
|
||||||
|
* base/branch may be specified as user:branch to allow easy copying
|
||||||
|
from Github PRs.
|
||||||
|
USAGE
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
work="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
base=$( echo "$1" | sed "s/:/\//" )
|
||||||
|
shift
|
||||||
|
|
||||||
|
version=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
git fetch upstreams
|
||||||
|
|
||||||
|
git checkout -B "${work}" --no-track "${base}"
|
||||||
|
|
||||||
|
push=$( git rev-parse --abbrev-ref --symbolic-full-name '@{push}' \
|
||||||
|
2>/dev/null ) || true
|
||||||
|
if [[ "${push}" != "" ]]
|
||||||
|
then
|
||||||
|
echo "Warning: ${push} may already exist."
|
||||||
|
fi
|
||||||
|
|
||||||
|
build=$( find -name BuildInfo.cpp )
|
||||||
|
sed 's/\(^.*versionString =\).*$/\1 "'${version}'"/' ${build} > version.cpp && \
|
||||||
|
diff "${build}" version.cpp && exit 1 || \
|
||||||
|
mv -vi version.cpp ${build}
|
||||||
|
|
||||||
|
git diff
|
||||||
|
|
||||||
|
git add ${build}
|
||||||
|
|
||||||
|
git commit -S -m "Set version to ${version}"
|
||||||
|
|
||||||
|
git log --oneline --first-parent ${base}^..
|
||||||
|
|
||||||
|
cat << PUSH
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
This script will not push. Verify everything is correct, then push
|
||||||
|
to your repo, and create a PR as described in CONTRIBUTING.md.
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
PUSH
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user