정적 자술 파일 재생성

원직: https://aralroca.com/blog/static-readme-regeneration
GitHub는 최근 개인 정보 페이지에 가격 인하 템플릿을 표시하는 "비밀"기능을 출시했습니다.너는 아마 이 일을 들은 적이 있을 것이다.사용자 이름으로 된 환매 프로토콜을 만들고 그곳에서 README.md 파일을 만드는 것이 필요합니다.
GitHub의 템플릿 가격 인하를 생각할 때 정적 내용을 떠올리는 경우가 많습니다.그러나 본문에서 나는 더욱 진일보하고 싶다.나는 너에게 수시로 업데이트될 내용을 추가하는 방법을 알려줄 것이다.당신의 최신 트윗, 최신 유튜브 동영상, 최신 블로그 게시물에 대해서도.

aralroca 내 GitHub 설명서 재구매
다음을 소개합니다.
  • About Static Readme Regeneration (SRR)

  • Implementation
  • README.tpl
  • Script to generate the README.md
  • GitHub action with a cron
  • Conclusion
  • References
  • 정적 자술 파일 재생성(SRR) 정보


    '정적 자술 재생'이라는 것은 파일README.md이 우리의 스크립트에 의해 생성되고 정기적으로 (우리가 프로그래밍한) 재구성README.md의 로봇 업데이트 내용을 통해 이루어진다는 뜻이다.이렇게 하는 장점은 README.md 진정으로 변화가 발생할 때만 로봇이 환매를 약속할 수 있다는 데 있다.이렇게 자술한 내용은 완전히 정태적일 수 없으며, 매일, 매시간, 심지어 매분마다 변화할 수 있다.
    이를 위해 cron에 GitHub 작업을 사용합니다.

    GitHub 작업의 정적 재생성에 대한 차트

    실시


    나는 내가 개인 자료에서 한 것을 예로 들 것이다.그것은 항상 내 블로그의 마지막 다섯 문장과 매일의 업데이트를 보여 준다.이렇게 하면 나는 긴장을 풀 수 있다. 왜냐하면 내가 블로그에 새로운 글을 올릴 때 내 개인 자료의 README.md 파일이 자동으로 업데이트된다는 것을 알고 있기 때문이다.

    자술한 문서.제3자 물류


    템플릿 파일에 사용할 README.md.tpl 형식의 파일을 만듭니다.이 파일에는 .tpl 의 모든 정적 내용이 포함됩니다.우리는 여기에서 우리가 README.md 파일에 쓴 것처럼 표시를 할 것이다.
    주요한 차이점은 우리가 동태를 실현하기 위해 삽입 기호를 추가할 것이다.이렇게 하면 우리의 스크립트는 동적 내용으로 그것들을 대체할 수 있을 것이다.
    README.md부터 .md.tpl까지 보간도

    자술한 파일을 만드는 스크립트입니다.의학 박사


    스크립트는 다음을 수행해야 합니다.
  • 파일을 읽습니다.md.
  • 로부터 모든 게시물을 가져옵니다.
  • + 필터 5로 정렬합니다.
  • 파일을 작성하여 README.tpl.md - 5개 항목에 대한 삽입값을 태그 문자열로 바꿉니다.
  • https://aralroca.com/rss.xml
    이것은 어떤 언어로도 실현할 수 있다.JavaScript、Rust、Python、Go、C...이런 상황에서 저는 러스트를 선택했습니다. 주로 저는 이 방면의 경험이 없기 때문에 저는 이 기회를 빌려 조금 배웠습니다. (만약 당신이 녹병 전문가이고 개선할 수 있는 점을 보았다면 마음대로 환매에 문제를 만들어 주십시오.)
    > 주요루피
    mod create_readme;
    
    use create_readme::create_readme;
    
    fn main() {
        match create_readme() {
            Ok(_v) => println!("README.md file generated correctly"),
            Err(e) => println!("Opps! there was an error: {:?}", e),
        }
    }
    
    > 자술 파일을 만듭니다.루피
    extern crate chrono;
    extern crate rss;
    
    use chrono::DateTime;
    use rss::Channel;
    use std::cmp::Ordering;
    use std::fs;
    
    struct FeedItem {
        title: String,
        link: String,
        pub_date: String,
    }
    
    pub fn create_readme() -> std::io::Result<()> {
        let tpl =
            fs::read_to_string("README.md.tpl")
            .expect("Something went wrong reading the README.tpl file");
    
        let last_articles = get_latest_articles();
    
        return fs::write(
            "README.md",
            tpl.replace("%{{latest_articles}}%", &last_articles),
        );
    }
    
    fn get_latest_articles() -> String {
        let mut posts: Vec<FeedItem> = get_blog_rss();
    
        // Sort articles by pub_date
        posts.sort_by(|a, b| {
            let date_a = DateTime::parse_from_rfc2822(&a.pub_date).unwrap();
            let date_b = DateTime::parse_from_rfc2822(&b.pub_date).unwrap();
    
            if date_b < date_a {
                Ordering::Less
            } else if date_b > date_a {
                Ordering::Greater
            } else {
                Ordering::Equal
            }
        });
    
        // Filter las 5 articles + format each one as markdown list string
        return posts[..5].iter().fold("".to_string(), |acc, item| {
            format!("{} \n* [{}]({})", acc, item.title, item.link)
        });
    }
    
    // Fetch all articles of my blog on rss.xml
    fn get_blog_rss() -> Vec<FeedItem> {
        let items = Channel::from_url("https://aralroca.com/rss.xml")
            .unwrap()
            .items()
            .iter()
            .map(|item| FeedItem {
                title: item.title().unwrap().to_string(),
                link: item.link().unwrap().to_string(),
                pub_date: item.pub_date().unwrap().to_string(),
            })
            .collect();
    
        items
    }
    

    cron의 GitHub 작업 사용


    일단 구축pub_date 스크립트가 생기면 GitHub 조작을 사용하여cron을 생성할 수 있습니다.
    작업을 만들려면 먼저 스크립트를 주 분기에 업로드한 다음 GitHub의 작업 탭을 클릭하여 작업을 만드는 것이 좋습니다.이런 방식을 통해 GitHub는 스크립트 언어를 검사하고 기본 yaml을 만듭니다.

    기본 yaml의 일부 내용을 대체합니다.
  • 스케줄링cron
  • 스크립트 실행README.md 대신 README.tpl.md
  • 재생성된 자술 파일 제출(변경된 경우에만)
  • > .github/workflows/rust.yml 회사
    name: Rust
    
    on:
    
      # Schedule a cron
      schedule:
        - cron: "0 0 */1 * *" # each day at 00:00 UTC
    
    env:
      CARGO_TERM_COLOR: always
    
    jobs:
      build:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v2
        - name: Build
    
        # Replace "cargo build" to "cargo run" to run the script
          run: cargo run
    
        # Commit the regenerated README only when it change 
        # (git diff --quiet && git diff --staged --quiet )
        - run: |
            git config user.name aralroca
            git config user.email [email protected]
            git add README.md
            git diff --quiet && git diff --staged --quiet || git commit -m "[gh-action] Update README"
            git push origin master
    

    결론


    한 마디로 하면 대부분의 환매에서 자술한 파일은 정태적이지만 GitHub의 조작과 GitHub의 이 새로운 기능으로 인해 우리는 우리의 README.md을 구축하여 우리의 개인 자료를 항상 최신 업데이트(발표, 홍보, 추문, 게시글 등)와 최신 상태로 유지할 수 있다.

    공구서류

  • https://www.aboutmonica.com/blog/how-to-create-a-github-profile-readme
  • 좋은 웹페이지 즐겨찾기