Coder Social home page Coder Social logo

cask-pkg / cask.rs Goto Github PK

View Code? Open in Web Editor NEW
69.0 2.0 3.0 953 KB

A universal, distributed binary file manager. 一个通用的去中心化二进制管理器

License: MIT License

Rust 94.91% Makefile 0.20% Batchfile 0.10% Shell 3.06% PowerShell 1.73%
rust package distributed distribution manager cask

cask.rs's Issues

feat: support build step

[package]
name = "github.com/axetroy/gpm.rs"
bin = "gpm"
versions = ["0.1.12", "0.1.11"]
authors = ["Axetroy <[email protected]>"]
keywords = ["gpm", "git", "project", "manager"]
repository = "https://github.com/axetroy/gpm.rs"
description = """
A command line tool, manage your hundreds of repository, written with Rust.
"""

[build.unix]
sh = """
git clone https://github.com/axetroy/gpm.rs
make
"""
[[build.unix.binary]]
name = "gpm"
path = "./gpm"

[build.windows]
cmd = """
git clone https://github.com/axetroy/gpm.rs
make
"""
[[build.windows.binary]]
name = "gpm"
path = "./gpm.exe"

This formula will clone https://github.com/axetroy/gpm.rs and then run make command.

Why need a separate repo to store Cask.toml

I see the configuration is only one file, why not just put Cask.toml in the project repo instead of creating a separate one, I understand that Cask.toml should also be part of the project, no need to store it separately.

Support build for powerpc

https://github.com/axetroy/cask.rs/runs/5643148108?check_suite_focus=true

error: failed to run custom build command for `bzip2-sys v0.1.11+1.0.8`

Caused by:
  process didn't exit successfully: `/home/runner/work/cask.rs/cask.rs/target/release/build/bzip2-sys-a6ccc4bdf2d32a24/build-script-build` (exit status: 1)
  --- stdout
  cargo:rerun-if-env-changed=BZIP2_NO_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_powerpc64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS_powerpc64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_ALLOW_CROSS
  cargo:rerun-if-env-changed=PKG_CONFIG_powerpc64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_powerpc64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_powerpc64-unknown-linux-gnu
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_powerpc64_unknown_linux_gnu
  cargo:rerun-if-env-changed=TARGET_PKG_CONFIG_SYSROOT_DIR
  cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR
  TARGET = Some("powerpc64-unknown-linux-gnu")
  OPT_LEVEL = Some("z")
  HOST = Some("x86_64-unknown-linux-gnu")
  CC_powerpc64-unknown-linux-gnu = None
  CC_powerpc64_unknown_linux_gnu = None
  TARGET_CC = None
  CC = None
  CROSS_COMPILE = None
  CFLAGS_powerpc64-unknown-linux-gnu = None
  CFLAGS_powerpc64_unknown_linux_gnu = None
  TARGET_CFLAGS = None
  CFLAGS = None
  CRATE_CC_NO_DEFAULTS = None
  DEBUG = Some("false")
  CARGO_CFG_TARGET_FEATURE = None
  running: "powerpc-linux-gnu-gcc" "-Os" "-ffunction-sections" "-fdata-sections" "-fPIC" "-m64" "-I" "bzip2-1.0.8" "-D_FILE_OFFSET_BITS=64" "-DBZ_NO_STDIO" "-o" "/home/runner/work/cask.rs/cask.rs/target/powerpc64-unknown-linux-gnu/release/build/bzip2-sys-111e0700d8097fca/out/lib/bzip2-1.0.8/blocksort.o" "-c" "bzip2-1.0.8/blocksort.c"

  --- stderr


  error occurred: Failed to find tool. Is `powerpc-linux-gnu-gcc` installed?

remove bzip2-sys and use in pure-rust impl

support template renderer in Hook script

[package]
name = "github.com/axetroy/gpm.rs"
bin = "gpm"
versions = ["0.1.12", "0.1.11"]
authors = ["Axetroy <[email protected]>"]
keywords = ["gpm", "git", "project", "manager"]
repository = "https://github.com/axetroy/gpm.rs"
description = """
A command line tool, manage your hundreds of repository, written with Rust.
"""

[context]
foo = "bar"

[hook.unix.sh]
preinstall = """
echo "Welcome install {package.name}"
echo "hello {context.foo}"
"""
postinstall = """
echo "{package.bin}@{version} has been installed."
echo "Try runing with fllowing command {package.bin} --help"
"""

[darwin]
x86_64 = "https://github.com/axetroy/gpm.rs/releases/download/v{version}/gpm_darwin_amd64.tar.gz"

BREAKING CHANGE: remove {package}-cask.git fallback

cask will priority to requests {package}-cask.git

If that exists. then fetch Cask.toml from it.

if not then fetch from {package}.git

This looks great, but no one seems to want to create one more repository.

So, I want to remove it

detect a repo exist or not

fetch from a not exist repo

$ GIT_TERMINAL_PROMPT=0 git ls-remote -h https://github.com/axetroy/gpm.rsa
fatal: could not read Username for 'https://github.com/axetroy/gpm.rsa': terminal prompts disabled

Tries to search for cask file in the downloads folder

$ cask

Loading package information...
Error: cask-no-cask-file ("/Users/User/Downloads/Cask")
  mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0xc02439de6512f81>))
  debug-early-backtrace()
  debug-early(error (cask-no-cask-file "/Users/User/Downloads/Cask"))
  signal(cask-no-cask-file ("/Users/User/Downloads/Cask"))
  (if (f-file? (cask-file bundle)) (progn (let* (package-alist package-activated-list package-archives package-archive-contents (load-path load-path) (package-directory-list (eval (car (get 'package-directory-list 'standard-value)))) (package-load-list (eval (car
(get 'package-load-list 'standard-value)))) (package-user-dir (cask-elpa-path bundle)) (package-gnupghome-dir "/Users/User/.emacs.d/elpa/gnupg")) (cask--use-environment bundle t t) :refresh t (let* ((--cl-rest-- (cask--dependencies-and-missing bundle)) (runtime (if (= (length --cl-rest--) 3) (car-safe (prog1 --cl-rest-- (setq --cl-rest-- (cdr --cl-rest--)))) (signal 'wrong-number-of-arguments (list '(runtime develop missing-dependencies &aux (dependencies (cask--uniq-dependencies (append runtime develop))) (total (length dependencies))) (length --cl-rest--))))) (develop (car-safe (prog1 --cl-rest-- (setq --cl-rest-- (cdr --cl-rest--))))) (missing-dependencies (car-safe (prog1 --cl-rest-- (setq --cl-rest-- (cdr --cl-rest--))))) (dependencies (cask--uniq-dependencies (append runtime develop))) (total (length dependencies))) (progn (if (or (not (boundp 'cask-cli--silent)) (not cask-cli--silent)) (progn (princ (ansi--concat :stderr (ansi-green "done") "\n") #'external-debugging-output))) (if (or (not (boundp 'cask-cli--silent)) (not cask-cli--silent)) (progn (princ (ansi--concat (ansi-green "Package operations: %d installs, %d removals\n" total 0)) nil))) (let ((upper-bound total) (counter 0)) (while (< counter upper-bound) (let ((inx counter)) (cask--install-dependency bundle (nth inx dependencies) inx total)) (setq counter (1+ counter)))) (if missing-dependencies (progn (signal 'cask-missing-dependencies missing-dependencies))))))) (signal 'cask-no-cask-file (list (cask-file bundle))))
  cask-install(#s(cask-bundle :name nil :version nil :description nil :runtime-dependencies nil :development-dependencies nil :path "/Users/User/Downloads/" :patterns nil :sources nil))
  (progn (cask-install (cask-cli--bundle)))
  (condition-case err (progn (cask-install (cask-cli--bundle))) (cask-missing-dependencies (let ((missing-dependencies (cdr err))) (error "Some dependencies were not available: %s" (s-join ", " (mapcar #'symbol-name (mapcar #'cask-dependency-name missing-dependencies)))))) (cask-failed-initialization (let* ((data (cdr err)) (message (error-message-string (nth 0 data))) (output (nth 1 data))) (error "Package initialization failed: %s\nOutput:\n%s" message output))) (cask-failed-installation (let* ((data (cdr err)) (message (nth 0 data)) (output (nth 1 data))) (error "Package installation failed: %s\nOutput:\n%s" message output))))
  cask-cli/install()
  commander--handle-command(("install"))
  commander-parse(("install"))
  (if commander-parsing-done nil (commander-parse (or commander-args (cdr command-line-args-left))))
  eval-buffer(#<buffer  *load*> nil "/opt/homebrew/Cellar/cask/0.9.0/cask-cli.el" nil t)
  #f(compiled-function (buffer file) #<bytecode 0x1466c42b14fe6e2b>)(#<buffer  *load*> "/opt/homebrew/Cellar/cask/0.9.0/cask-cli.el")
  load-with-code-conversion("/opt/homebrew/Cellar/cask/0.9.0/cask-cli.el" "/opt/homebrew/Cellar/cask/0.9.0/cask-cli.el" nil t #f(compiled-function (buffer file) #<bytecode 0x1466c42b14fe6e2b>))
  command-line--load-script("/opt/homebrew/Cellar/cask/0.9.0/cask-cli.el")
  command-line-1(("-scriptload" "/opt/homebrew/Cellar/cask/0.9.0/cask-cli.el" "--" "install"))
  command-line()
  normal-top-level()
Cask file does not exist: "/Users/User/Downloads/Cask"

安装失败

PS C:\Users\Administrator\Desktop> cask install github.com/iawia002/lux
Fetching github.com/iawia002/lux formula...
thread 'main' panicked at 'install package fail!: can not found package github.com/iawia002/lux

Location:
src\formula.rs:215:17', src/main.rs:210:18
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

Running hook in diff platform

Windows:

Cmd or PowerShell

Unix:

sh or shell

Command:

[hook]
preinstall = "echo 'preinstall'"
postinstall = "echo 'postinstall'"

Windows:

# running hook in windows with PowerShell
[hook.windows]
preinstall = "echo 'preinstall'"
postinstall = "echo 'postinstall'"

Unix:

# running hook in windows with sh
[hook.unix]
preinstall = "echo 'preinstall'"
postinstall = "echo 'postinstall'"

v1.0 roadmap

  • extrator: drop tar command #21
  • extractor: extract file from sub-folder in tarball #29
  • extractor: support more tarball format
    • .7z it's very rare in the distribution software, so drop it
    • .rar it's very rare in the distribution software, so drop it
    • .tar.bz2
  • Stable Cask.toml
    • Simplify the download url #27
    • Support checksums file
    • Support build step instead of specify download URL
    • Support binary file in sub-folder 7ca7a8a
    • Implement dependencies #28
  • Maybe: drop git command, use pure rust implement Git lib #36
  • Command-line auto-complete
  • Colorful some important information in stdout/stderr d882909
  • Add check for update command #13
  • A documentation website
  • #31
  • Cross compile #33

install script not working

It doesn't work with or without sudo.

output.mp4

Neofetch

                   -`                    z@frame
                  .o+`                   -------
                 `ooo/                   OS: Arch Linux x86_64
                `+oooo:                  Host: HP 250 G7 Notebook PC
               `+oooooo:                 Kernel: 5.16.13-arch1-1
               -+oooooo+:                Uptime: 3 hours, 49 mins
             `/:-:++oooo+:               Packages: 991 (pacman)
            `/++++/+++++++:              Shell: zsh 5.8.1
           `/++++++++++++++:             Resolution: 1366x768, 1600x900
          `/+++ooooooooooooo/`           WM: i3
         ./ooosssso++osssssso+`          Theme: Adwaita [GTK2/3]
        .oossssso-````/ossssss+`         Icons: Adwaita [GTK2/3]
       -osssssso.      :ssssssso.        Terminal: WezTerm
      :osssssss/        osssso+++.       CPU: Intel i5-1035G1 (8) @ 3.600GHz
     /ossssssss/        +ssssooo/-       GPU: Intel Iris Plus Graphics G1
   `/ossssso+/:-        -:/+osssso+-     GPU: NVIDIA GeForce MX110
  `+sso+:-`                 `.-/+oso:    Memory: 3690MiB / 15785MiB
 `++:.                           `-/+/
 .`                                 `/

Simplify the download url

Current:

# Cask.toml
[darwin]
x86_64 = { url = "https://github.com/<username>/<repo>/releases/download/v{version}/darwin_amd64.tar.gz" }

If the CASK.TOML file is just a simple point to binary, we can simplify it.

[darwin]
- x86_64 = { url = "https://github.com/<username>/<repo>/releases/download/v{version}/darwin_amd64.tar.gz" }
+ x86_64 = "https://github.com/<username>/<repo>/releases/download/v{version}/darwin_amd64.tar.gz"

Get version automatically from git ls-remote command

$ git ls-remote -t https://github.com/axetroy/dvm
c70b12ab73babed5e5d65a5bb2bb2dfb7181ca3f	refs/tags/v0.1.0
13c286ef00d0026ee16bfa98bf150e407fb60c2f	refs/tags/v0.1.1
6c38034fbe23e35262dd2062c83718f7c6297054	refs/tags/v0.1.10
a7d3ef07937c6724881b29be08ba0caecb64dfec	refs/tags/v0.1.11
b5234a34b1da347dcfbeb5c21162fc93c78dab88	refs/tags/v0.1.2
ef28817866c2588d12d274a156a10b9e5166c960	refs/tags/v0.1.3
a7647312094512544296ac7de325a40c5f2aee0d	refs/tags/v0.1.4
c2518391ff2b39621862de301316f4ea3f0b2cea	refs/tags/v0.1.5
daae12e737bd975da2ec90b7f492ffee4a3ee5e3	refs/tags/v0.1.6
19fbb2a0bd929e1c2568452db84a431097d1872a	refs/tags/v0.1.7
3fabb4d92df23cfefc692723dac8b512be8a4827	refs/tags/v0.1.8
272d60788edfbd8f2892006d7d690205f5c6e435	refs/tags/v0.1.9
068b9a97149fb8a95a57606c9c1886fa3f98ef49	refs/tags/v1.0.0
0723cc7ed005ba1f3cc1c8eb1ee246139b3c83ce	refs/tags/v1.0.1
14ed54a90af9d384d3d06394ce611c32f4504a50	refs/tags/v1.0.2
90997aa7206832d3e1c4db981fd4f97aeffac313	refs/tags/v1.0.3
35874bb867ba63cf0373ca22032ae535e3dbb868	refs/tags/v1.1.0
25e772a8e51b7dbcee408e8da07b118a28bc9886	refs/tags/v1.1.1
6a678115eda26b97b9546c474e9bad07262deb7c	refs/tags/v1.1.2
89fc250cc9ccda95b8c8cf4a8b6158f550d412c5	refs/tags/v1.1.3
598f08ed08f9d1c317e230dad2b5b9a30ae7a253	refs/tags/v1.2.0
73ddf27526db3ff83ce75138ea562c6fb7fd415b	refs/tags/v1.2.1
8449e79a4ffb021f728a82edc4ae5c9bb61ad01d	refs/tags/v1.2.2
b20dac8798e02b08abcfa0e47909cc137554c953	refs/tags/v1.2.3
a97db540576524ab10b7030a8fd69a4db964cae3	refs/tags/v1.2.4
722c2cc3d43f00c9403c0eebdf8e690609b64c89	refs/tags/v1.2.5
a02c30a373e6444cd51d219311dd5e3383f3ee25	refs/tags/v1.3.0
459ab664bb6463cb4f3995dbab43265425d17103	refs/tags/v1.3.1
816a28d716ab6daaff26a5746667389712cd39b3	refs/tags/v1.3.10
c706294f12327248d8f9d587dc19c9fc0a120a35	refs/tags/v1.3.11
ca02d625e54aac7d979a9fdc8b27b2b5b7d122b3	refs/tags/v1.3.2
29a5ebdf6a28dc60d856fa2456073a8e7a9e46db	refs/tags/v1.3.3
571b178745ab4082974f4823189543c417539e60	refs/tags/v1.3.4
2bee09d61176e5e32542b02ba8a9b73ea4bae876	refs/tags/v1.3.5
3d667e8151ebfb0f1d26ad0bf2fc208b008dcd9c	refs/tags/v1.3.6
3eccf807f4d4b106c09d826733da3b625ca56b37	refs/tags/v1.3.7
2dc72ef3fe5aa871123a515d265a60b93036450c	refs/tags/v1.3.8
051b2166b4e08f8290d01bf0e2205187e2fb7456	refs/tags/v1.3.9

make package.versions optional.

if versions not provide, then it will fetch tags from repo and pick valid version

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.