1747: start GitHub pages r=matklad a=matklad

bors r+

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2019-09-02 11:42:58 +00:00 committed by GitHub
commit ef75e461df
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 120 additions and 4 deletions

View file

@ -5,6 +5,8 @@ gen-syntax = "run --package ra_tools --bin ra_tools -- gen-syntax"
# Extracts the tests from
gen-tests = "run --package ra_tools --bin ra_tools -- gen-tests"
build-website = "run --package website-gen"
# Installs the visual studio code extension
install-ra = "run --package ra_tools --bin ra_tools -- install-ra"
install-code = "run --package ra_tools --bin ra_tools -- install-ra" # just an alias

View file

@ -28,7 +28,7 @@ matrix:
language: rust
rust: stable
script:
- cargo doc --all --no-deps
- cargo build-website
env:
- RUSTFLAGS="-D warnings", CARGO_INCREMENTAL=0
@ -59,7 +59,7 @@ deploy:
skip-cleanup: true
github-token: $DOCS_TOKEN # Set in the settings page of your repository, as a secure variable
keep-history: true
local-dir: target/doc
local-dir: target/website/
on:
branch: master
condition: $DEPLOY_DOCS = 1

7
Cargo.lock generated
View file

@ -1776,6 +1776,13 @@ name = "wasi"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "website-gen"
version = "0.0.0"
dependencies = [
"walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "winapi"
version = "0.2.8"

View file

@ -1,5 +1,5 @@
[workspace]
members = [ "crates/*" ]
members = [ "crates/*", "website/website-gen" ]
[profile.release]
incremental = true

View file

@ -55,7 +55,7 @@ https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Frls-2.2E0
## Quick Links
* Work List: https://paper.dropbox.com/doc/RLS-2.0-work-list--AZ3BgHKKCtqszbsi3gi6sjchAQ-42vbnxzuKq2lKwW0mkn8Y
* API docs: https://rust-analyzer.github.io/rust-analyzer/ra_ide_api/index.html
* API docs: https://rust-analyzer.github.io/rust-analyzer/api-docs/ra_ide_api/index.html
* CI: https://travis-ci.org/rust-analyzer/rust-analyzer
## License

21
website/src/index.html Normal file
View file

@ -0,0 +1,21 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Hello World! Site Title</title>
</head>
<body>
<h1>rust-analyzer</h1>
<ul>
<li>
<a href="./api-docs/ra_ide_api/index.html">API Docs</a>
</li>
<li>
<a href="./wasm-demo/index.html">WASM Demo</a>
</li>
</ul>
</body>
</html>

View file

@ -0,0 +1,13 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Hello World! Site Title</title>
</head>
<body>
TBD
</body>
</html>

View file

@ -0,0 +1,9 @@
[package]
name = "website-gen"
version = "0.0.0"
authors = ["Aleksey Kladov <aleksey.kladov@gmail.com>"]
edition = "2018"
publish = false
[dependencies]
walkdir = "2.2.0"

View file

@ -0,0 +1,64 @@
use std::{fs, path::Path, process::Command};
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
/// This tool builds the github-pages website to the `./target/website` folder
fn main() {
if let Err(err) = try_main() {
eprintln!("{}", err);
std::process::exit(-1);
}
}
fn try_main() -> Result<()> {
check_cwd()?;
build_scaffold()?;
build_docs()?;
println!("Finished\n./target/website/index.html");
Ok(())
}
fn cargo() -> Command {
Command::new("cargo")
}
fn check_cwd() -> Result<()> {
let toml = std::fs::read_to_string("./Cargo.toml")?;
if !toml.contains("[workspace]") {
Err("website-gen should be run from the root of workspace")?;
}
Ok(())
}
fn build_docs() -> Result<()> {
let status = cargo().args(&["doc", "--all", "--no-deps"]).status()?;
if !status.success() {
Err("cargo doc failed")?;
}
sync_dir("./target/doc", "./target/website/api-docs")?;
Ok(())
}
fn build_scaffold() -> Result<()> {
sync_dir("./website/src", "./target/website")
}
fn sync_dir(src: impl AsRef<Path>, dst: impl AsRef<Path>) -> Result<()> {
return sync_dir(src.as_ref(), dst.as_ref());
fn sync_dir(src: &Path, dst: &Path) -> Result<()> {
let _ = fs::remove_dir_all(dst);
fs::create_dir_all(dst)?;
for entry in walkdir::WalkDir::new(src) {
let entry = entry?;
let src_path = entry.path();
let dst_path = dst.join(src_path.strip_prefix(src)?);
if src_path.is_dir() {
fs::create_dir_all(dst_path)?;
} else {
fs::copy(src_path, dst_path)?;
}
}
Ok(())
}
}