mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This cleans up the ci scripts so that they can be run from an arbitrary directory, and so that they don't have any bash lint issues, and are more explicit about which dart/pub/dartanalyzer executable they run. I also fixed the format script to take a "--fix" argument that will fix all of the formatting issues found, including trailing whitespace and gn files. I added a warning to the license script about untracked/ignored files in the fluttter repo because those so often trip up the license script. I added missing license information to the ci scripts too. There's now a bit of boilerplate at the beginning of each script (the follow_links function) in order to reliably find the actual location of the script: I'd put it into a common file, except that that code would be needed to reliably find the common location too, so I needed to duplicate it. It's the same boilerplate as what is used in the flutter/flutter repo for the flutter and dart scripts. I deleted the ci/test.sh script, since it seems to be obsolete (the test it tries to run doesn't exist anywhere).
140 lines
5.5 KiB
Bash
Executable File
140 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright 2013 The Flutter Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
set -e
|
|
shopt -s nullglob
|
|
|
|
# Needed because if it is set, cd may print the path it changed to.
|
|
unset CDPATH
|
|
|
|
# On Mac OS, readlink -f doesn't work, so follow_links traverses the path one
|
|
# link at a time, and then cds into the link destination and find out where it
|
|
# ends up.
|
|
#
|
|
# The function is enclosed in a subshell to avoid changing the working directory
|
|
# of the caller.
|
|
function follow_links() (
|
|
cd -P "$(dirname -- "$1")"
|
|
file="$PWD/$(basename -- "$1")"
|
|
while [[ -h "$file" ]]; do
|
|
cd -P "$(dirname -- "$file")"
|
|
file="$(readlink -- "$file")"
|
|
cd -P "$(dirname -- "$file")"
|
|
file="$PWD/$(basename -- "$file")"
|
|
done
|
|
echo "$file"
|
|
)
|
|
|
|
SCRIPT_DIR=$(follow_links "$(dirname -- "${BASH_SOURCE[0]}")")
|
|
SRC_DIR="$(cd "$SCRIPT_DIR/../.."; pwd -P)"
|
|
DART_BIN="$SRC_DIR/third_party/dart/tools/sdks/dart-sdk/bin"
|
|
PATH="$DART_BIN:$PATH"
|
|
|
|
echo "Verifying license script is still happy..."
|
|
echo "Using pub from $(command -v pub), dart from $(command -v dart)"
|
|
|
|
untracked_files="$(cd "$SRC_DIR/flutter"; git status --ignored --short | grep -E "^!" | awk "{print\$2}")"
|
|
untracked_count="$(echo "$untracked_files" | wc -l)"
|
|
if [[ $untracked_count -gt 0 ]]; then
|
|
echo ""
|
|
echo "WARNING: There are $untracked_count untracked/ignored files or directories in the flutter repository."
|
|
echo "False positives may occur."
|
|
echo "You can use 'git clean -dxf' in the flutter dir to clean out these files."
|
|
echo "BUT, be warned that this will recursively remove all these files and directories:"
|
|
echo "$untracked_files"
|
|
echo ""
|
|
fi
|
|
|
|
dart --version
|
|
|
|
# Collects the license information from the repo.
|
|
# Runs in a subshell.
|
|
function collect_licenses() (
|
|
cd "$SRC_DIR/flutter/tools/licenses"
|
|
pub get
|
|
dart --enable-asserts lib/main.dart \
|
|
--src ../../.. \
|
|
--out ../../../out/license_script_output \
|
|
--golden ../../ci/licenses_golden
|
|
)
|
|
|
|
# Verifies the licenses in the repo.
|
|
# Runs in a subshell.
|
|
function verify_licenses() (
|
|
local exitStatus=0
|
|
cd "$SRC_DIR"
|
|
|
|
# These files trip up the script on Mac OS X.
|
|
find . -name ".DS_Store" -exec rm {} \;
|
|
|
|
collect_licenses
|
|
|
|
for f in out/license_script_output/licenses_*; do
|
|
if ! cmp -s "flutter/ci/licenses_golden/$(basename "$f")" "$f"; then
|
|
echo "============================= ERROR ============================="
|
|
echo "License script got different results than expected for $f."
|
|
echo "Please rerun the licenses script locally to verify that it is"
|
|
echo "correctly catching any new licenses for anything you may have"
|
|
echo "changed, and then update this file:"
|
|
echo " flutter/sky/packages/sky_engine/LICENSE"
|
|
echo "For more information, see the script in:"
|
|
echo " https://github.com/flutter/engine/tree/master/tools/licenses"
|
|
echo ""
|
|
diff -U 6 "flutter/ci/licenses_golden/$(basename "$f")" "$f"
|
|
echo "================================================================="
|
|
echo ""
|
|
exitStatus=1
|
|
fi
|
|
done
|
|
|
|
echo "Verifying license tool signature..."
|
|
if ! cmp -s "flutter/ci/licenses_golden/tool_signature" "out/license_script_output/tool_signature"; then
|
|
echo "============================= ERROR ============================="
|
|
echo "The license tool signature has changed. This is expected when"
|
|
echo "there have been changes to the license tool itself. Licenses have"
|
|
echo "been re-computed for all components. If only the license script has"
|
|
echo "changed, no diffs are typically expected in the output of the"
|
|
echo "script. Verify the output, and if it looks correct, update the"
|
|
echo "license tool signature golden file:"
|
|
echo " ci/licenses_golden/tool_signature"
|
|
echo "For more information, see the script in:"
|
|
echo " https://github.com/flutter/engine/tree/master/tools/licenses"
|
|
echo ""
|
|
diff -U 6 "flutter/ci/licenses_golden/tool_signature" "out/license_script_output/tool_signature"
|
|
echo "================================================================="
|
|
echo ""
|
|
exitStatus=1
|
|
fi
|
|
|
|
echo "Checking license count in licenses_flutter..."
|
|
|
|
local actualLicenseCount
|
|
actualLicenseCount="$(tail -n 1 flutter/ci/licenses_golden/licenses_flutter | tr -dc '0-9')"
|
|
local expectedLicenseCount=2 # When changing this number: Update the error message below as well describing all expected license types.
|
|
|
|
if [[ $actualLicenseCount -ne $expectedLicenseCount ]]; then
|
|
echo "=============================== ERROR ==============================="
|
|
echo "The total license count in flutter/ci/licenses_golden/licenses_flutter"
|
|
echo "changed from $expectedLicenseCount to $actualLicenseCount."
|
|
echo "It's very likely that this is an unintentional change. Please"
|
|
echo "double-check that all newly added files have a BSD-style license"
|
|
echo "header with the following copyright:"
|
|
echo " Copyright 2013 The Flutter Authors. All rights reserved."
|
|
echo "Files in 'third_party/txt' may have an Apache license header instead."
|
|
echo "If you're absolutely sure that the change in license count is"
|
|
echo "intentional, update 'flutter/ci/licenses.sh' with the new count."
|
|
echo "================================================================="
|
|
echo ""
|
|
exitStatus=1
|
|
fi
|
|
|
|
if [[ $exitStatus -eq 0 ]]; then
|
|
echo "Licenses are as expected."
|
|
fi
|
|
return $exitStatus
|
|
)
|
|
|
|
verify_licenses |