Coder Social home page Coder Social logo

sustech-cra / mirrorz Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mirrorz-org/mirrorz

0.0 1.0 0.0 339 KB

Your next MirrorS is not MirrorS, nor MirrorSes, it's MirrorZ.

Home Page: https://www.mirrorz.org

License: MIT License

Python 21.37% HTML 1.79% JavaScript 56.01% SCSS 20.83%

mirrorz's Introduction

MirrorZ

Your next MirrorS is not MirrorS, nor MirrorSes, it's MirrorZ.

Demo

https://mirrorz.org. Currently mirrorz.json for each MirrorS is real-time generated by their maintainer.

Intro

MirrorS are heterogeneous. It is hard for a single mirror to provide all mirrors, so differences occur.

For end users, this is not a good experience as they need to search for available mirrors.

To make things easy, MirrorZ is intended to include all mirrorS, so a unified interface is needed.

Data Format v1.2 (draft)

Each MirrorS participating in MirrorZ should provide a mirrorz.json with the following fields.

{
  "version": 1.2,
  "site": {
    "url": "https://example.org",
    "logo": "https://example.org/favicon.ico",
    "abbr": "EXAMPLE",
    "name": "样例镜像站",
    "homepage": "https://blog.example.org",
    "issue": "https://github.com/example/issues",
    "request": "https://github.com/example/mirror-request",
    "email": "[email protected]",
    "group": "QQ: 10086 and/or Telegram @something",
    "disk": "may be any string showing usage of disk, e.g. usage",
    "note": "may be any string",
  },
  "info": [
    {
      "distro": "Debian",
      "category": "os",
            "urls": [
                {
                    "name": "10.7.0 (amd64, CD installer with xfce)",
                    "url": "/debian-cd/current/amd64/iso-cd/debian-10.7.0-amd64-xfce-CD-1.iso"
                }
            ]
    }
  ],
  "mirrors": [
    {
      "cname": "AOSP",
      "desc": "Android 操作系统源代码",
      "url": "/AOSP",
      "status": "S",
      "help": "/help/AOSP/",
      "upstream": "https://android.googlesource.com/mirror/manifest",
      "size": "596G"
    },
    {
      "cname": "AUR",
      "desc": "Arch Linux 用户软件库",
      "url": "https://aur.tuna.tsinghua.edu.cn/",
      "status": "S1612195849X1612196849N",
      "help": "/help/AUR/",
      "upstream": "https://aur.archlinux.org/"
    }
  ]
}

Notes

  • version is optional for version 1.x
  • previous versions of this protocol could be found in git history; protocols in v1.x are back-ward compatible
  • site provides the global info about one MirrorS
  • only site.url and site.abbr are mandatory
  • site.url should not end with slash /
  • info is used for category view
  • the name of info.distro should be agreed and have a mapping, maintained in cname.json
  • mirrors is used for list view
  • the name of mirrors.cname should be agreed and have a mapping, maintained in cname.json
  • mirrors.desc may differ for each MirrorS since there are excludes for some MirrorS
  • mirrors.desc may be empty
  • if mirrors.url begins with a slash /, it should be appended to site.url to form a full url
  • mirrors.status is a concat of strings of pattern [A-Z](\d+)?. Only one main status is allowed; the number of auxiliary status is not limited.
    • S1600000000: successful. (optional) last successful ended unix timestamp
    • Y1600000000: syncing. (optional) start to sync unix timestamp
    • F1600000000: failed. (optional) last attempt to sync unix timestamp
    • P1600000000: paused. (optional) the unix timetamp sync stopped
    • U: unknown
    • X1600000000: (auxiliary) next scheduled sync unix timestamp
    • N1600000000: (auxiliary) new mirror. (optional) unix timestamp the repo added
    • O1600000000: (auxiliary) old successful timestamp, used only when it is syncing or failed
  • mirrors.help may be empty, or the same rule as mirrors.url
  • mirrors.upstream, mirrors.size may be empty

Backend and Frontend

For each MirrorS, it should provide a json file of the above format (recommended name mirrorz.json) and allow CORS of mirrorz.org on that file (CORS on all domains is recommended as some other sites may also use this; and useful for debuging).

MirrorS may provide mirrorz.json using their mirror servers, or any other valid url that reflects the real-time status of their mirror. For example, for TUNA-series MirrorS, a CloudFlare worker is deployed (currently another server status.tuna.wiki is used instead of CF worker as it is slow on generating json file).

MirrorS should provide mirrorz.json with the name inside processed by the mapping cname.json. In the generating scripts of MirrorS, cname.json should be real-time fetched from mirrorz.org/static/json/cname.json

The list of participating MirrorS should be maintained in src/config/mirrors.js.

For the front end, previously a naive one is implemented using JQuery and Jekyll, currently a modern frontend is implemented by @CircuitCoder using React, one MirrorS may provide their FrontEnd for rendering, for example mirrorz.org/{tuna,ustc,sjtug,hit}/.

mirrorz.org should only be statically generated.

With user's consent, mirrorz.org may use Cookie or other methods to archive personalized rendering such as turning off some MirrorS when the json file is large and/or slow to download.

Contributing and Developing

MirrorS

For participating MirrorS, it should add and maintain their url to mirrorz json file in src/config/mirrors.js, in the url https is needed, and the url should be widely accessible (not limited to campus) as all users of mirrorz.org would request that url.

MirrorS may also contribute their mirrorz.json generating scripts in the directory scripts. The standard script is scripts/tunasync/mirrorz.py, all the details are specified there and unclear points of the data format is explaned there.

Frontend

One may use

yarn --frozen-lockfile
yarn start

to start a local server.

For other frontend, like tuna-stylish frontend, they should be added using permlink like /tuna/.

Deployment

Currently CI is not deployed.

One should copy all the contents of dist into the root of distribution repo; also, the directory static and file CNAME should be copied.

cp dist/* CNAME -r static dst/

Misc

Currently *.json is ignored in .gitignore. If one wants to commit a json file, they should use git add -f.

mirrorz's People

Contributors

anymoe avatar billchenchina avatar circuitcoder avatar dramforever avatar skyzh avatar sparkcyf avatar taoky avatar xyenon avatar zenithalhourlyrate avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.