Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

revamp documentation #785

Merged
merged 4 commits into from
Feb 10, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
ci: update deployment for doc rearrangement
This fixes CI to handle the new documentation files. We also continue to
do more cleanup. In particular, we devise a nicer way of detecting the
most recent Cargo OUT_DIR by writing a dummy file, and looking for the
most recently modified version of that file.
  • Loading branch information
BurntSushi committed Feb 10, 2018
commit e40c8b8c8e556efbe6ebf329ddd4037bcc8dc56d
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ target
/ignore/Cargo.lock
/termcolor/Cargo.lock
/wincolor/Cargo.lock
/deployment

# Snapcraft files
stage
prime
parts
*.snap
*.pyc
ripgrep*_source.tar.bz2
ripgrep*_source.tar.bz2
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ before_deploy: ci/before_deploy.sh
deploy:
provider: releases
file_glob: true
file: deployment/${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}.*
file: deployment/${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}.tar.gz
skip_cleanup: true
on:
condition: $TRAVIS_RUST_VERSION = nightly
Expand Down
9 changes: 9 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ fn main() {
}
};
fs::create_dir_all(&outdir).unwrap();

let stamp_path = Path::new(&outdir).join("ripgrep-stamp");
if let Err(err) = File::create(&stamp_path) {
panic!("failed to write {}: {}", stamp_path.display(), err);
}
if let Err(err) = generate_man_page(&outdir) {
eprintln!("failed to generate man page: {}", err);
}
Expand Down Expand Up @@ -65,6 +70,10 @@ fn generate_man_page<P: AsRef<Path>>(outdir: P) -> io::Result<()> {
eprintln!("Error from running 'a2x': {}", err);
return Ok(());
}
// 1. Read asciidoc template.
// 2. Interpolate template with auto-generated docs.
// 3. Save interpolation to disk.
// 4. Use a2x (part of asciidoc) to convert to man page.
let outdir = outdir.as_ref();
let cwd = env::current_dir()?;
let tpl_path = cwd.join("doc").join("rg.1.txt.tpl");
Expand Down
40 changes: 24 additions & 16 deletions ci/before_deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,31 +17,39 @@ mk_artifacts() {
}

mk_tarball() {
# When cross-compiling, use the right `strip` tool on the binary.
local gcc_prefix="$(gcc_prefix)"
local td="$(mktemp -d)"
# Create a temporary dir that contains our staging area.
# $tmpdir/$name is what eventually ends up as the deployed archive.
local tmpdir="$(mktemp -d)"
local name="${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}"
local staging="$td/$name"
mkdir -p "$staging/complete"
local staging="$tmpdir/$name"
mkdir -p "$staging"/{complete,doc}
# The deployment directory is where the final archive will reside.
# This path is known by the .travis.yml configuration.
local out_dir="$(pwd)/deployment"
mkdir -p "$out_dir"
# Find the correct (most recent) Cargo "out" directory. The out directory
# contains shell completion files and the man page.
local cargo_out_dir="$(cargo_out_dir "target/$TARGET")"

# Copy the ripgrep binary and strip it.
cp target/$TARGET/release/rg "$staging/rg"
cp "target/$TARGET/release/rg" "$staging/rg"
"${gcc_prefix}strip" "$staging/rg"
# Copy the README and licenses.
# Copy the licenses and README.
cp {README.md,UNLICENSE,COPYING,LICENSE-MIT} "$staging/"
# Copy documentation and man page.
cp {CHANGELOG.md,FAQ.md,GUIDE.md} "$staging/doc/"
if command -V a2x 2>&1 > /dev/null; then
# The man page should only exist if we have asciidoc installed.
cp "$cargo_out_dir/rg.1" "$staging/doc/"
fi
# Copy shell completion files.
cp \
target/"$TARGET"/release/build/ripgrep-*/out/{rg.bash,rg.fish,_rg.ps1} \
"$staging/complete/"
cp complete/_rg "$td/$name/complete/"
# Copy man page.
cp \
target/"$TARGET"/release/build/ripgrep-*/out/rg.1 \
"$td/$name/"

(cd "$td" && tar czf "$out_dir/$name.tar.gz" *)
rm -rf "$td"
cp "$cargo_out_dir"/{rg.bash,rg.fish,_rg.ps1} "$staging/complete/"
cp complete/_rg "$staging/complete/"

(cd "$tmpdir" && tar czf "$out_dir/$name.tar.gz" "$name")
rm -rf "$tmpdir"
}

main() {
Expand Down
9 changes: 9 additions & 0 deletions ci/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ install_targets() {
fi
}

install_osx_dependencies() {
if ! is_osx; then
return
fi

brew install asciidoc
}

configure_cargo() {
local prefix=$(gcc_prefix)
if [ -n "${prefix}" ]; then
Expand All @@ -44,6 +52,7 @@ EOF
}

main() {
install_osx_dependencies
install_rustup
install_targets
configure_cargo
Expand Down
36 changes: 16 additions & 20 deletions ci/script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,16 @@ main() {
# output of cargo a little trickier. So just wipe it.
cargo clean
# Test a normal debug build.
cargo build --target "${TARGET}" --verbose --all
cargo build --target "$TARGET" --verbose --all

# Show the output of build.rs stderr.
# Show the output of the most recent build.rs stderr.
set +x
find ./target/"$TARGET"/debug -name stderr | while read stderr; do
if [ -s "$stderr" ]; then
echo "===== $stderr ====="
cat "$stderr"
echo "====="
fi
done
stderr="$(find "target/$TARGET/debug" -name stderr -print0 | xargs -0 ls -t | head -n1)"
if [ -s "$stderr" ]; then
echo "===== $stderr ====="
cat "$stderr"
echo "====="
fi
set -x

# sanity check the file type
Expand All @@ -37,19 +36,16 @@ main() {
"$(dirname "${0}")/test_complete.sh"

# Check that we've generated man page and other shell completions.
find ./target/"$TARGET"/debug/build/ripgrep-* -name 'out' | \
while read outdir; do
file "$outdir/rg.bash"
file "$outdir/rg.fish"
file "$outdir/_rg.ps1"
# man page requires asciidoc, and we only install it on Linux x86.
if is_linux; then
file "$outdir/rg.1"
fi
done
outdir="$(cargo_out_dir "target/$TARGET/debug")"
file "$outdir/rg.bash"
file "$outdir/rg.fish"
file "$outdir/_rg.ps1"
# N.B. man page isn't generated on ARM cross-compile, but we gave up
# long before this anyway.
file "$outdir/rg.1"

# Run tests for ripgrep and all sub-crates.
cargo test --target "${TARGET}" --verbose --all
cargo test --target "$TARGET" --verbose --all
}

main
21 changes: 21 additions & 0 deletions ci/utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

# Various utility functions used through CI.

# Finds Cargo's `OUT_DIR` directory from the most recent build.
#
# This requires one parameter corresponding to the target directory
# to search for the build output.
cargo_out_dir() {
# This works by finding the most recent stamp file, which is produced by
# every ripgrep build.
target_dir="$1"
find "$target_dir" -name ripgrep-stamp -print0 \
| xargs -0 ls -t \
| head -n1 \
| xargs dirname
}

host() {
case "$TRAVIS_OS_NAME" in
linux)
Expand Down Expand Up @@ -68,3 +82,10 @@ is_linux() {
*) return 1 ;;
esac
}

is_osx() {
case "$TRAVIS_OS_NAME" in
osx) return 0 ;;
*) return 1 ;;
esac
}