1
use sha2::{Digest, Sha256};
2
use std::env;
3
use std::fs;
4
use std::io::{self, Read};
5
use std::process::Command;
6

            
7
12
fn checksum(file_path: &str) -> io::Result<String> {
8
12
    let mut file = fs::File::open(file_path)?;
9
12
    let mut hasher = Sha256::new();
10
12
    let mut buffer = [0; 1024];
11

            
12
    loop {
13
60
        let bytes_read = file.read(&mut buffer)?;
14
60
        if bytes_read == 0 {
15
12
            break;
16
48
        }
17
48
        hasher.update(&buffer[..bytes_read]);
18
    }
19

            
20
12
    Ok(format!("{:x}", hasher.finalize()))
21
12
}
22

            
23
6
fn main() {
24
6
    println!("cargo:rerun-if-changed=../doc/disdoc.org");
25
6
    let status = Command::new("emacs")
26
6
        .args([
27
6
            "-q",
28
6
            "--batch",
29
6
            "../doc/disdoc.org",
30
6
            "-l",
31
6
            "ox-md",
32
6
            "--eval",
33
6
            "(org-md-export-to-markdown)",
34
6
            "-f",
35
6
            "save-buffer",
36
6
            "-f",
37
6
            "kill-emacs",
38
6
        ])
39
6
        .status()
40
6
        .expect("Failed to export doc");
41

            
42
6
    assert!(status.success(), "Building finance doc failed");
43

            
44
6
    fs::rename("../doc/disdoc.md", "../target/nomisync.md").expect("Can't update finance doc file");
45

            
46
6
    println!(
47
6
        "cargo:rustc-env=CARGO_TARGET_DIR={}/../",
48
6
        env::var("CARGO_MANIFEST_DIR").unwrap()
49
    );
50

            
51
6
    println!("cargo:rerun-if-changed=../doc/nomisync.org");
52
6
    let status = Command::new("emacs")
53
6
        .args([
54
6
            "-q",
55
6
            "--batch",
56
6
            "../doc/nomisync.org",
57
6
            "--eval",
58
6
            "(org-babel-tangle)",
59
6
            "-f",
60
6
            "kill-emacs",
61
6
        ])
62
6
        .status()
63
6
        .expect("Failed to export SQL");
64

            
65
6
    let status = Command::new("sqlfluff")
66
6
        .args([
67
6
            "fix",
68
6
            "--dialect",
69
6
            "postgres",
70
6
            "../doc/nomisync.sql",
71
6
            "--force",
72
6
        ])
73
6
        .status()
74
6
        .expect("Failed to format SQL");
75

            
76
6
    assert!(status.success(), "Building migrations failed");
77

            
78
6
    if checksum("../doc/nomisync.sql").unwrap()
79
6
        == checksum("../migrations/0002_nomisync.sql").unwrap()
80
6
    {
81
6
        fs::remove_file("../doc/nomisync.sql").unwrap();
82
6
    } else {
83
        fs::rename("../doc/nomisync.sql", "../migrations/0002_nomisync.sql")
84
            .expect("Can't update finance migrations file");
85
    }
86

            
87
6
    println!("cargo:rerun-if-changed=../migrations");
88
6
}