HubLatest 0.1.3
Script to automatically download latest release from GitHub repos
License: MIT
Requires Python: >=3.6

# HubLatest

Script for retrieving latest releases from GitHub repositories.

## Requirements


* Python 3.6 and above

## Commandline options

```
usage: hublatest [-h] [-r REGEX] [--prerelease] [--no-prerelease]
                 [--post-download COMMAND] [--post-remove COMMAND] [-c PATH]
                 [-v PATH] [-d PATH] [--use-subdir] [-f] [--max-retry N]
                 [--verbose]
                 [OWNER/REPO]
```

### Positional Arguments

*  **`OWNER/REPO`**

   Repo identifier in format of `owner/repo` (if this option is specified, the repo list in config file will be overridden)

### Named Arguments

*  **`-r, --regex-filter`**

   Filter filenames by regex

*  **`--prerelease`**

   Get the latest prerelease
	- By default, the newest release will be downloaded, regardless of prerelease or not

*  **`--no-prerelease`**

   Get the latest non-prerelease
	- By default, the newest release will be downloaded, regardless of prerelease or not

*  **`--post-download`**

   Command to be executed after each file is downloaded
	- Variables can be inserted: `{filename}`, `{filedir}`, `{filepath}`, `{owner}`, `{repo}`, `{version}`; meaning filename, containing directory of the file, file path, repo owner, repo name, current version; all paths are relative to the work directory

*  **`--post-remove`**

   Command to be executed after each file is removed
	- Variables can be inserted: `{filename}`, `{filedir}`, `{filepath}`, `{owner}`, `{repo}`, `{version}`; meaning filename, containing directory of the file, file path, repo owner, repo name, current version; all paths are relative to the work directory

*  **`-c, --config`**

   Path to the config file

*  **`-v, --version-file-dir`**

   Directory to put version files (if not specified, version files will not be used)

*  **`-d, --download-dir`**

   Directory to put downloaded files (Default is current working directory)

*  **`--use-subdir`**

   Save files to sub-directories like `owner/repo` (no sub-directories by default)

*  **`-f, --force`**

   Ignore current version file(s) and forcibly execute

*  **`--max-retry`**

   Max retry attemps (default: 5)

*  **`--verbose`**

   Show debug output

## Config file

Config file is in INI format. Example:

```
## Settings under here applies to all downloads by default
[DEFAULT]

# Put versions under `./version_files/`
version_file_dir = ./version_files

# Download files to `./download_files/`
download_dir = ./download_files

# Use directory structure like `owner/repo/`
use_subdir = true


## Release files of `some_repo/some_project` will be downloaded
[some_repo/some_project]

# only download zip files
regex_filter = .zip$

# no prereleases
prerelease = false

# extract after download
post_download = unzip {filepath} -d {filedir}/extracted_files

# delete extracted files when old version is removed
post_remove = rm -r {filedir}/extracted_files
```

Usage:

```
hublatest -c config.ini
```

Notes:


* Options set under `[DEFAULT]` are glocal and will be applied by default


* Options set under `[DEFAULT]` can be overriden by commandline options or options


* Add sections named like `[owner/repo]` to auto-download release files from a list of repositories when no repositories are specified from commandline; if no specific options are needed for a repository, its section can be left empty


* Refer to the commandline option usages for the config options


* `prerelease = true` means `--prerelease`; `prerelease = false` means `--no-prerelease`


---

（中文版说明）

用来获取GitHub仓库的Release的脚本。

## 环境要求


* 需要Python 3.6及以上。

## 命令行用法

```
usage: hublatest [-h] [-r REGEX] [--prerelease] [--no-prerelease]
                 [--post-download COMMAND] [--post-remove COMMAND] [-c PATH]
                 [-v PATH] [-d PATH] [--use-subdir] [-f] [--max-retry N]
                 [--verbose]
                 [OWNER/REPO]
```

### Positional Arguments

*  **`OWNER/REPO`**

   `所有者/仓库`的形式的仓库名（如果指定此参数，配置文件指定的仓库列表及选项会被覆盖）

### Named Arguments

*  **`-r, --regex-filter`**

   用regex过滤文件名

*  **`--prerelease`**

   下载最新的Prerelease
	- 默认不管是否是Prerelease，直接下载列表中最新的

*  **`--no-prerelease`**

   下载最新的非Prerelease
	- 默认不管是否是Prerelease，直接下载列表中最新的

*  **`--post-download`**

   下载完成后执行的命令
	- 可插入的变量：`{filename}`、`{filedir}`、`{filepath}`、`{owner}`、`{repo}`、`{version}`，分别代表文件名、文件所在目录、文件路径、仓库所有者、仓库名、当前版本；路径均用相对于工作目录的相对路径表示

*  **`--post-remove`**

   删除文件后执行的命令
	- 可插入的变量：`{filename}`、`{filedir}`、`{filepath}`、`{owner}`、`{repo}`、`{version}`，分别代表文件名、文件所在目录、文件路径、仓库所有者、仓库名、当前版本；路径均用相对于工作目录的相对路径表示

*  **`-c, --config`**

   配置文件路径

*  **`-v, --version-file-dir`**

   版本文件存放目录（如果不指定此参数，默认不使用版本文件）

*  **`-d, --download-dir`**

   下载目标目录（默认：当前工作目录）

*  **`--use-subdir`**

   使用子目录（用`所有者/仓库`的形式存放文件，默认不使用）

*  **`-f, --force`**

   忽略当前版本文件，强制执行

*  **`--max-retry`**

   重试次数（默认：5）

*  **`--verbose`**

   显示调试输出

## 配置文件用法

配置文件为INI格式，以下是配置文件的例子：

```
## 这下面的设置会默认应用于所有的下载
[DEFAULT]

# 指定将版本文件放在`./version_files/`下
version_file_dir = ./version_files

# 指定下载文件至`./download_files/`下
download_dir = ./download_files

# 使用形如`owner/repo/`的子目录形式
use_subdir = true


## 下载仓库`some_repo/some_project`的Release文件
[some_repo/some_project]

# 只下载zip文件
regex_filter = .zip$

# 不下载Prerelease
prerelease = false

# 下载完成后解压
post_download = unzip {filepath} -d {filedir}/extracted_files

# 在删除旧版本时删除之前解压出来的文件
post_remove = rm -r {filedir}/extracted_files
```

用法例如：

```
hublatest -c config.ini
```

一些说明：


* `[DEFAULT]` 下的选项会应用于所有仓库


* 可以用命令行参数覆盖 `[DEFAULT]` 中所写的设置项


* 要下载Release的各仓库用形如 `[所有者/仓库名]` 的小节标题表示，针对单个仓库的选项可以指定它对应的小节标题下；如果不需要指定任何参数，可以放一个空的小节


* 配置文件中的设置项意义参见命令行参数的用法


* `prerelease` 这一项给 `true` 是 `--prerelease` 的效果；给 `false` 是 `--no-prerelease` 的效果