Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
polkadot-sdk
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
parity
Mirrored projects
polkadot-sdk
Commits
066bad63
Unverified
Commit
066bad63
authored
1 year ago
by
Alexander Samusev
Committed by
GitHub
1 year ago
Browse files
Options
Downloads
Patches
Plain Diff
[ci] Move rust-features.sh script to .gitlab folder (#2630)
parent
19bf94d6
Branches
Branches containing commit
No related merge requests found
Pipeline
#422528
passed with stages
in 1 hour, 33 minutes, and 29 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
.gitlab/pipeline/check.yml
+1
-5
1 addition, 5 deletions
.gitlab/pipeline/check.yml
.gitlab/rust-features.sh
+87
-0
87 additions, 0 deletions
.gitlab/rust-features.sh
with
88 additions
and
5 deletions
.gitlab/pipeline/check.yml
+
1
−
5
View file @
066bad63
...
@@ -65,11 +65,7 @@ test-rust-features:
...
@@ -65,11 +65,7 @@ test-rust-features:
-
.kubernetes-env
-
.kubernetes-env
-
.test-refs-no-trigger-prs-only
-
.test-refs-no-trigger-prs-only
script
:
script
:
-
git clone
-
bash .gitlab/rust-features.sh .
--depth=1
--branch="master"
https://github.com/paritytech/pipeline-scripts
-
bash ./pipeline-scripts/rust-features.sh .
job-starter
:
job-starter
:
stage
:
check
stage
:
check
...
...
This diff is collapsed.
Click to expand it.
.gitlab/rust-features.sh
0 → 100755
+
87
−
0
View file @
066bad63
#!/usr/bin/env bash
##############################################################################
#
# This script checks that crates to not carelessly enable features that
# should stay disabled. It's important to check that since features
# are used to gate specific functionality which should only be enabled
# when the feature is explicitly enabled.
#
# Invocation scheme:
# ./rust-features.sh <CARGO-ROOT-PATH>
#
# Example:
# ./rust-features.sh path/to/substrate
#
# The steps of this script:
# 1. Check that all required dependencies are installed.
# 2. Check that all rules are fullfilled for the whole workspace. If not:
# 4. Check all crates to find the offending ones.
# 5. Print all offending crates and exit with code 1.
#
##############################################################################
set
-eu
# Check that cargo and grep are installed - otherwise abort.
command
-v
cargo
>
/dev/null 2>&1
||
{
echo
>
&2
"cargo is required but not installed. Aborting."
;
exit
1
;
}
command
-v
grep
>
/dev/null 2>&1
||
{
echo
>
&2
"grep is required but not installed. Aborting."
;
exit
1
;
}
# Enter the workspace root folder.
cd
"
$1
"
echo
"Workspace root is
$PWD
"
function
main
()
{
feature_does_not_imply
'default'
'runtime-benchmarks'
feature_does_not_imply
'std'
'runtime-benchmarks'
feature_does_not_imply
'default'
'try-runtime'
feature_does_not_imply
'std'
'try-runtime'
}
# Accepts two feature names as arguments.
# Checks that the first feature does not imply the second one.
function
feature_does_not_imply
()
{
ENABLED
=
$1
STAYS_DISABLED
=
$2
echo
"📏 Checking that
$ENABLED
does not imply
$STAYS_DISABLED
..."
# Check if the forbidden feature is enabled anywhere in the workspace.
# But only check "normal" dependencies, so no "dev" or "build" dependencies.
if
cargo tree
--no-default-features
--locked
--workspace
-e
features,normal
--features
"
$ENABLED
"
|
grep
-qF
"feature
\"
$STAYS_DISABLED
\"
"
;
then
echo
"❌
$ENABLED
implies
$STAYS_DISABLED
in the workspace"
else
echo
"✅
$ENABLED
does not imply
$STAYS_DISABLED
in the workspace"
return
fi
# Find all Cargo.toml files but exclude the root one since we already know that it is broken.
CARGOS
=
`
find
.
-name
Cargo.toml
-not
-path
./Cargo.toml
`
NUM_CRATES
=
`
echo
"
$CARGOS
"
|
wc
-l
`
FAILED
=
0
PASSED
=
0
echo
"🔍 Checking all
$NUM_CRATES
crates - this takes some time."
for
CARGO
in
$CARGOS
;
do
OUTPUT
=
$(
cargo tree
--no-default-features
--locked
--offline
-e
features,normal
--features
$ENABLED
--manifest-path
$CARGO
2>&1
||
true
)
if
echo
"
$OUTPUT
"
|
grep
-qF
"not supported for packages in this workspace"
;
then
# This case just means that the pallet does not support the
# requested feature which is fine.
PASSED
=
$((
PASSED+1
))
elif
echo
"
$OUTPUT
"
|
grep
-qF
"feature
\"
$STAYS_DISABLED
\"
"
;
then
echo
"❌ Violation in
$CARGO
by dependency:"
# Best effort hint for which dependency needs to be fixed.
echo
"
$OUTPUT
"
|
grep
-wF
"feature
\"
$STAYS_DISABLED
\"
"
|
head
-n
1
FAILED
=
$((
FAILED+1
))
else
PASSED
=
$((
PASSED+1
))
fi
done
echo
"Checked
$NUM_CRATES
crates in total of which
$FAILED
failed and
$PASSED
passed."
echo
"Exiting with code 1"
exit
1
}
main
"
$@
"
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment