Merge pull request #1591 from tomusdrw/optimizing-build
Optimizing & Cleaning the build
This commit is contained in:
commit
691e55227d
@ -9,3 +9,8 @@ trim_trailing_whitespace=true
|
|||||||
max_line_length=120
|
max_line_length=120
|
||||||
insert_final_newline=true
|
insert_final_newline=true
|
||||||
|
|
||||||
|
[.travis.yml]
|
||||||
|
indent_style=space
|
||||||
|
indent_size=2
|
||||||
|
tab_width=8
|
||||||
|
end_of_line=lf
|
||||||
|
92
.travis.yml
92
.travis.yml
@ -8,105 +8,67 @@ branches:
|
|||||||
- /^stable-.*$/
|
- /^stable-.*$/
|
||||||
- /^beta$/
|
- /^beta$/
|
||||||
- /^stable$/
|
- /^stable$/
|
||||||
|
|
||||||
git:
|
git:
|
||||||
depth: 3
|
depth: 3
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
fast_finish: true
|
|
||||||
allow_failures:
|
|
||||||
- rust: nightly
|
|
||||||
include:
|
include:
|
||||||
- rust: stable
|
- rust: stable
|
||||||
env: FEATURES="--features travis-beta" RUN_TESTS="true"
|
env: FEATURES="--features travis-beta" RUN_TESTS="true"
|
||||||
# - rust: beta
|
|
||||||
# env: FEATURES="--features travis-beta" RUN_TESTS="true"
|
|
||||||
- rust: stable
|
|
||||||
env: FEATURES="--features travis-beta" RUN_BUILD="true"
|
|
||||||
- rust: beta
|
- rust: beta
|
||||||
env: FEATURES="--features travis-beta" RUN_BUILD="true"
|
|
||||||
- rust: stable
|
|
||||||
env: FEATURES="--features travis-beta" RUN_COVERAGE="true"
|
env: FEATURES="--features travis-beta" RUN_COVERAGE="true"
|
||||||
# - rust: nightly
|
|
||||||
# env: FEATURES="--features travis-nightly" RUN_BENCHES="true"
|
|
||||||
- rust: nightly
|
|
||||||
env: FEATURES="--features travis-nightly" RUN_TESTS="true"
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- TRAVIS_NODE_VERSION="6"
|
- TRAVIS_NODE_VERSION="6"
|
||||||
# GH_TOKEN
|
- CXX="g++-4.8"
|
||||||
- secure: bumJASbZSU8bxJ0EyPUJmu16AiV9EXOpyOj86Jlq/Ty9CfwGqsSXt96uDyE+OUJf34RUFQMsw0nk37/zC4lcn6kqk2wpuH3N/o85Zo/cVZY/NusBWLQqtT5VbYWsV+u2Ua4Tmmsw8yVYQhYwU2ZOejNpflL+Cs9XGgORp1L+/gMRMC2y5Se6ZhwnKPQlRJ8LGsG1dzjQULxzADIt3/zuspNBS8a2urJwlHfGMkvHDoUWCviP/GXoSqw3TZR7FmKyxE19I8n9+iSvm9+oZZquvcgfUxMHn8Gq/b44UbPvjtFOg2yam4xdWXF/RyWCHdc/R9EHorSABeCbefIsm+zcUF3/YQxwpSxM4IZEeH2rTiC7dcrsKw3XsO16xFQz5YI5Bay+CT/wTdMmJd7DdYz7Dyf+pOvcM9WOf/zorxYWSBOMYy0uzbusU2iyIghQ82s7E/Ahg+WARtPgkuTLSB5aL1oCTBKHqQscMr7lo5Ti6RpWLxEdTQMBznc+bMr+6dEtkEcG9zqc6cE9XX+ox3wTU6+HVMfQ1ltCntJ4UKcw3A6INEbw9wgocQa812CIASQ2fE+SCAbz6JxBjIAlFUnD1lUB7S8PdMPwn9plfQgKQ2A5YZqg6FnBdf0rQXIJYxQWKHXj/rBHSUCT0tHACDlzTA+EwWggvkP5AGIxRxm8jhw=
|
- CC="gcc-4.8"
|
||||||
- TARGETS="-p ethkey -p ethstore -p ethash -p ethcore-util -p ethcore -p ethsync -p ethcore-rpc -p parity -p ethjson -p ethcore-dapps -p ethcore-signer -p bigint"
|
- RUST_BACKTRACE="1"
|
||||||
- ARCHIVE_SUFFIX="-${TRAVIS_OS_NAME}-${TRAVIS_TAG}"
|
|
||||||
- KCOV_FEATURES=""
|
|
||||||
- KCOV_CMD="./kcov-master/tmp/usr/local/bin/kcov --exclude-pattern /usr/,/.cargo,/root/.multirust,src/tests,util/json-tests,util/src/network/tests,sync/src/tests,ethcore/src/tests,ethcore/src/evm/tests,ethstore/tests target/kcov"
|
|
||||||
- RUN_TESTS="false"
|
- RUN_TESTS="false"
|
||||||
- RUN_COVERAGE="false"
|
- RUN_COVERAGE="false"
|
||||||
- RUN_BUILD="false"
|
# GH_TOKEN for documentation
|
||||||
- RUN_BENCHES="false"
|
- secure: bumJASbZSU8bxJ0EyPUJmu16AiV9EXOpyOj86Jlq/Ty9CfwGqsSXt96uDyE+OUJf34RUFQMsw0nk37/zC4lcn6kqk2wpuH3N/o85Zo/cVZY/NusBWLQqtT5VbYWsV+u2Ua4Tmmsw8yVYQhYwU2ZOejNpflL+Cs9XGgORp1L+/gMRMC2y5Se6ZhwnKPQlRJ8LGsG1dzjQULxzADIt3/zuspNBS8a2urJwlHfGMkvHDoUWCviP/GXoSqw3TZR7FmKyxE19I8n9+iSvm9+oZZquvcgfUxMHn8Gq/b44UbPvjtFOg2yam4xdWXF/RyWCHdc/R9EHorSABeCbefIsm+zcUF3/YQxwpSxM4IZEeH2rTiC7dcrsKw3XsO16xFQz5YI5Bay+CT/wTdMmJd7DdYz7Dyf+pOvcM9WOf/zorxYWSBOMYy0uzbusU2iyIghQ82s7E/Ahg+WARtPgkuTLSB5aL1oCTBKHqQscMr7lo5Ti6RpWLxEdTQMBznc+bMr+6dEtkEcG9zqc6cE9XX+ox3wTU6+HVMfQ1ltCntJ4UKcw3A6INEbw9wgocQa812CIASQ2fE+SCAbz6JxBjIAlFUnD1lUB7S8PdMPwn9plfQgKQ2A5YZqg6FnBdf0rQXIJYxQWKHXj/rBHSUCT0tHACDlzTA+EwWggvkP5AGIxRxm8jhw=
|
||||||
- RUST_BACKTRACE="1"
|
- KCOV_CMD="./kcov-master/tmp/usr/local/bin/kcov"
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
apt: true
|
apt: true
|
||||||
directories:
|
directories:
|
||||||
- $TRAVIS_BUILD_DIR/target
|
- $TRAVIS_BUILD_DIR/target
|
||||||
|
- $TRAVIS_BUILD_DIR/kcov-master
|
||||||
- $HOME/.cargo
|
- $HOME/.cargo
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
packages:
|
packages:
|
||||||
- libcurl4-openssl-dev
|
- libcurl4-openssl-dev
|
||||||
- libelf-dev
|
- libelf-dev
|
||||||
- libdw-dev
|
- libdw-dev
|
||||||
|
- gcc-4.8
|
||||||
|
- g++-4.8
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install $TRAVIS_NODE_VERSION
|
- rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install $TRAVIS_NODE_VERSION
|
||||||
|
- (true && [ "$RUN_COVERAGE" = "false" ]) ||
|
||||||
|
(wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz &&
|
||||||
|
tar xzf master.tar.gz &&
|
||||||
|
mkdir -p kcov-master/build &&
|
||||||
|
cd kcov-master/build &&
|
||||||
|
cmake .. &&
|
||||||
|
make && make install DESTDIR=../tmp &&
|
||||||
|
cd)
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- if [ "$RUN_TESTS" = "true" ]; then cargo test --release --verbose ${FEATURES} ${TARGETS}; fi
|
- if [ "$RUN_TESTS" = "true" ]; then ./test.sh; fi
|
||||||
- if [ "$RUN_BENCHES" = "true" ]; then cargo bench --no-run ${FEATURES} ${TARGETS}; fi
|
- if [ "$RUN_COVERAGE" = "true" ]; then ./scripts/cov.sh "$KCOV_CMD"; fi
|
||||||
- if [ "$RUN_BUILD" = "true" ]; then cargo build --release --verbose ${FEATURES}; fi
|
|
||||||
- if [ "$RUN_BUILD" = "true" ]; then tar cvzf parity${ARCHIVE_SUFFIX}.tar.gz -C target/release parity; fi
|
|
||||||
|
|
||||||
after_success: |
|
after_success: |
|
||||||
[ "$RUN_COVERAGE" = "true" ] &&
|
|
||||||
wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz &&
|
|
||||||
tar xzf master.tar.gz && mkdir kcov-master/build && cd kcov-master/build && cmake .. && make && make install DESTDIR=../tmp && cd ../.. &&
|
|
||||||
cargo test --no-run ${KCOV_FEATURES} ${TARGETS} &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethkey-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethstore-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethcore_util-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethash-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethcore-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethsync-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethcore_rpc-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethcore_dapps-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethcore_signer-* &&
|
|
||||||
$KCOV_CMD target/debug/deps/ethjson-* &&
|
|
||||||
$KCOV_CMD target/debug/parity-* &&
|
|
||||||
[ $TRAVIS_BRANCH = master ] &&
|
[ $TRAVIS_BRANCH = master ] &&
|
||||||
[ $TRAVIS_PULL_REQUEST = false ] &&
|
[ $TRAVIS_PULL_REQUEST = false ] &&
|
||||||
[ $TRAVIS_RUST_VERSION = stable ] &&
|
[ $TRAVIS_RUST_VERSION = stable ] &&
|
||||||
cargo doc --no-deps --verbose ${KCOV_FEATURES} ${TARGETS} &&
|
./scripts/doc.sh &&
|
||||||
echo '<meta http-equiv=refresh content=0;url=ethcore/index.html>' > target/doc/index.html &&
|
|
||||||
pip install --user ghp-import &&
|
pip install --user ghp-import &&
|
||||||
/home/travis/.local/bin/ghp-import -n target/doc &&
|
/home/travis/.local/bin/ghp-import -n target/doc &&
|
||||||
git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
|
git push -fq https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
|
||||||
|
|
||||||
deploy:
|
|
||||||
provider: releases
|
|
||||||
api_key:
|
|
||||||
secure: "t+oGT/4lsy7IScw5s86Dpntl5Nyck4qG6nhHwMScc6FYzwLldgwgJaafL8Ej+HG+b7nFLriN+Snoa4YQ5o74X5ZlSWubVREOYQlL/fq7vcPB0DwAZ0Jufq1QW2R1M+3SwwF1eAwTv2W3G7A2K7dxjCVvENcy/gdxnZ36NeUPsqaCC9UcI2Yc7+4jyQwvx6ZfBvQeu+HbKENA0eUNs2ZQOID/1IPy0LJBvSyxAQYsysXdjTzGdNu4+Iba20E8uWYe4fAbgz+gwGarXg1L6D6gKyMlWkViqWjvXWBuDJJqMQZ3rw41AwZOoh3mKd2Lc0l6l4oZcEqPuob0yKTNjz1tuJy9xKTC2F2bDzsvUgk1IRfMK5ukXXXS09ZCZWuA9/GtnsqJ1xGTiwX+DhQzpVBHaBiseSNlYE1YN/3jNyGY+iSts1qut+1BwE7swmcTLsAPoAy8Ue+f7ErNoCg1lm71vq7VO2DLn7x2NqHyHUEuJ+7olDHSdE84G7d9otDRu/+TfMOw7GXwTaha6yJRInuNsnj4CFMLNVvYACzCC2idB7f7nUZoSFi9jf18S9fCMPVmazMrFj4g95HWrVHkjpV5zRTeUdTWw6DJl6pC9HFqORHdCvLv4Rc4dm5r3CmOcAQ0ZuiccV2oKzw4/Wic96daae8M5f5KSQ/WTr+h0wXZKp0="
|
|
||||||
skip_cleanup: true
|
|
||||||
file: parity${ARCHIVE_SUFFIX}.tar.gz
|
|
||||||
on:
|
|
||||||
tags: true
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
webhooks:
|
|
||||||
urls:
|
|
||||||
- https://hooks.slack.com/services/${SLACK_WEBHOOK}
|
|
||||||
on_success: always
|
|
||||||
on_failure: always
|
|
||||||
on_start: never
|
|
||||||
|
|
||||||
notifications:
|
|
||||||
slack:
|
|
||||||
rooms:
|
|
||||||
- ethcore:4EGxt9WP6AS7uX4JKXSfR9vi#chatops
|
|
||||||
|
43
cov.sh
43
cov.sh
@ -1,43 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# Installing KCOV under ubuntu
|
|
||||||
# https://users.rust-lang.org/t/tutorial-how-to-collect-test-coverages-for-rust-project/650#
|
|
||||||
### Install deps
|
|
||||||
# $ sudo apt-get install libcurl4-openssl-dev libelf-dev libdw-dev cmake gcc binutils-dev libiberty-dev
|
|
||||||
#
|
|
||||||
### Compile kcov
|
|
||||||
# $ wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && tar xf master.tar.gz
|
|
||||||
# $ cd kcov-master && mkdir build && cd build
|
|
||||||
# $ cmake .. && make && sudo make install
|
|
||||||
|
|
||||||
### Running coverage
|
|
||||||
if ! type kcov > /dev/null; then
|
|
||||||
echo "Install kcov first (details inside this file). Aborting."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cargo test \
|
|
||||||
-p ethkey \
|
|
||||||
-p ethstore \
|
|
||||||
-p ethash \
|
|
||||||
-p ethcore-util \
|
|
||||||
-p ethcore \
|
|
||||||
-p ethsync \
|
|
||||||
-p ethcore-rpc \
|
|
||||||
-p parity \
|
|
||||||
-p ethcore-signer \
|
|
||||||
-p ethcore-dapps \
|
|
||||||
--no-run || exit $?
|
|
||||||
rm -rf target/coverage
|
|
||||||
mkdir -p target/coverage
|
|
||||||
|
|
||||||
EXCLUDE="~/.multirust,rocksdb,secp256k1,src/tests,util/json-tests,util/src/network/tests,sync/src/tests,ethcore/src/tests,ethcore/src/evm/tests,ethstore/tests"
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethkey-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethstore-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethash-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_util-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethsync-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_rpc-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_signer-*
|
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_dapps-*
|
|
||||||
xdg-open target/coverage/index.html
|
|
53
scripts/cov.sh
Executable file
53
scripts/cov.sh
Executable file
@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Installing KCOV under ubuntu
|
||||||
|
# https://users.rust-lang.org/t/tutorial-how-to-collect-test-coverages-for-rust-project/650#
|
||||||
|
### Install deps
|
||||||
|
# $ sudo apt-get install libcurl4-openssl-dev libelf-dev libdw-dev cmake gcc binutils-dev libiberty-dev
|
||||||
|
#
|
||||||
|
### Compile kcov
|
||||||
|
# $ wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && tar xf master.tar.gz
|
||||||
|
# $ cd kcov-master && mkdir build && cd build
|
||||||
|
# $ cmake .. && make && sudo make install
|
||||||
|
|
||||||
|
### Running coverage
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
KCOV=${1:-kcov}
|
||||||
|
|
||||||
|
if ! type $KCOV > /dev/null; then
|
||||||
|
echo "Install kcov first (details inside this file). Aborting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
. ./scripts/targets.sh
|
||||||
|
cargo test $TARGETS --no-run || exit $?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
KCOV_TARGET="target/kcov"
|
||||||
|
KCOV_FLAGS="--verify"
|
||||||
|
EXCLUDE="/usr/lib,\
|
||||||
|
/usr/include,\
|
||||||
|
$HOME/.cargo,\
|
||||||
|
$HOME/.multirust,\
|
||||||
|
rocksdb,\
|
||||||
|
secp256k1,\
|
||||||
|
src/tests,\
|
||||||
|
util/json-tests,\
|
||||||
|
util/src/network/tests,\
|
||||||
|
ethcore/src/evm/tests,\
|
||||||
|
ethstore/tests\
|
||||||
|
"
|
||||||
|
|
||||||
|
rm -rf $KCOV_TARGET
|
||||||
|
mkdir -p $KCOV_TARGET
|
||||||
|
|
||||||
|
for FILE in `find target/debug/deps ! -name "*.*"`
|
||||||
|
do
|
||||||
|
$KCOV --exclude-pattern $EXCLUDE $KCOV_FLAGS $KCOV_TARGET $FILE
|
||||||
|
done
|
||||||
|
|
||||||
|
$KCOV --coveralls-id=${TRAVIS_JOB_ID} --exclude-pattern $EXCLUDE $KCOV_FLAGS $KCOV_TARGET target/debug/parity-*
|
||||||
|
|
||||||
|
exit 0
|
7
scripts/doc.sh
Executable file
7
scripts/doc.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# generate documentation only for partiy and ethcore libraries
|
||||||
|
|
||||||
|
. ./scripts/targets.sh
|
||||||
|
|
||||||
|
cargo doc --no-deps --verbose $TARGETS &&
|
||||||
|
echo '<meta http-equiv=refresh content=0;url=ethcore/index.html>' > target/doc/index.html
|
@ -1,5 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
FILE=./.git/hooks/pre-push
|
FILE=./.git/hooks/pre-push
|
||||||
|
. ./scripts/targets.sh
|
||||||
|
|
||||||
echo "#!/bin/sh\n" > $FILE
|
echo "#!/bin/sh\n" > $FILE
|
||||||
# Exit on any error
|
# Exit on any error
|
||||||
echo "set -e" >> $FILE
|
echo "set -e" >> $FILE
|
||||||
@ -7,6 +9,6 @@ echo "set -e" >> $FILE
|
|||||||
echo "cargo build --features dev" >> $FILE
|
echo "cargo build --features dev" >> $FILE
|
||||||
# Build tests
|
# Build tests
|
||||||
echo "cargo test --no-run --features dev \\" >> $FILE
|
echo "cargo test --no-run --features dev \\" >> $FILE
|
||||||
echo " -p ethkey -p ethstore -p ethash -p ethcore-util -p ethcore -p ethsync -p ethcore-rpc -p parity -p ethcore-dapps -p ethcore-signer" >> $FILE
|
echo $TARGETS >> $FILE
|
||||||
echo "" >> $FILE
|
echo "" >> $FILE
|
||||||
chmod +x $FILE
|
chmod +x $FILE
|
6
doc.sh → scripts/targets.sh
Executable file → Normal file
6
doc.sh → scripts/targets.sh
Executable file → Normal file
@ -1,7 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
# generate documentation only for partiy and ethcore libraries
|
|
||||||
|
|
||||||
cargo doc --no-deps --verbose \
|
export TARGETS="
|
||||||
-p ethkey \
|
-p ethkey \
|
||||||
-p ethstore \
|
-p ethstore \
|
||||||
-p ethash \
|
-p ethash \
|
||||||
@ -12,3 +11,4 @@ cargo doc --no-deps --verbose \
|
|||||||
-p ethcore-signer \
|
-p ethcore-signer \
|
||||||
-p ethcore-dapps \
|
-p ethcore-dapps \
|
||||||
-p parity \
|
-p parity \
|
||||||
|
-p bigint"
|
27
test.sh
27
test.sh
@ -1,15 +1,18 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Running Parity Full Test Sute
|
# Running Parity Full Test Sute
|
||||||
|
|
||||||
cargo test --features ethcore/json-tests $1 \
|
FEATURES="--features ethcore/json-tests"
|
||||||
-p ethkey \
|
|
||||||
-p ethstore \
|
case $1 in
|
||||||
-p ethash \
|
--no-json)
|
||||||
-p ethcore-util \
|
FEATURES=""
|
||||||
-p ethcore \
|
shift # past argument=value
|
||||||
-p ethsync \
|
;;
|
||||||
-p ethcore-rpc \
|
*)
|
||||||
-p ethcore-signer \
|
# unknown option
|
||||||
-p ethcore-dapps \
|
;;
|
||||||
-p parity \
|
esac
|
||||||
-p bigint
|
|
||||||
|
. ./scripts/targets.sh
|
||||||
|
cargo test $FEATURES $TARGETS $1 \
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user