Skip to content

Latest commit

 

History

History
126 lines (124 loc) · 6.96 KB

METADATA.md

File metadata and controls

126 lines (124 loc) · 6.96 KB
  • Metadata

  • A Machine Consumable & Automation Friendly dataset is published & kept UP To Date
  • It's available as JSON, TOML & YAML
  • Example:
!#${ARCH} is just $(uname -m), i.e aarch64 or x86_64
"https://bin.ajam.dev/${ARCH}/METADATA.AIO.json"
"https://bin.ajam.dev/aarch64/METADATA.AIO.json"
"https://bin.ajam.dev/x86_64/METADATA.AIO.json"
//The Structure is like:
 {
   "base": [
      {
         ${Binaries from bin.ajam.dev/${ARCH}/**/Baseutils/**}
      }
   ],
   "bin" : [
      {
         ${Binaries are from core bin.ajam.dev/$ARCH}/**}
      }
   ],
   "pkg" : [
      {
         ${Binaries, or rather pkgs are from Toolpacks Extras}
      }
   ]
  • [Each of the ${BIN/PKG} contains fields like]:
name: "#Contains the Name of the $PKG itself, this is NOT what it will/should be Installed as",
bin_name: "#Contains the real name, the $PKG will be installed as",
description: "#Contains the Description of the $PKG/$PKG_FAMILY [Otherwise EMPTY]",
note: "#Contains Additional Notes,Refs,Info the user need to be aware of, of the $PKG/$PKG_FAMILY"
version: "#Contains the version of the $PKG <AUTOGENERATED>",
download_url: "#Contains the Raw Direct Download URL of the $PKG <AUTOGENERATED>",
size: "#Contains the Total Size of the $PKG <AUTOGENERATED>",
bsum: "#Contains the Exact Blake3sum of the $PKG <AUTOGENERATED>",
shasum: "#Contains the Exact Sha256sum of the $PKG <AUTOGENERATED>",
build_date: "#Contains the Exact Date the $PKG was Built(Fetched) & Uploaded",
src_url: "#Contains the Github/Gitlab/$GIT_SRC URL of the $PKG/$PKG_FAMILY [Otherwise EMPTY]",
web_url: "#Contains the Website/Project Page URL of the $PKG/$PKG_FAMILY [Otherwise EMPTY]",
build_script: "#Contains the Actual Script the $BINARY was Built(Fetched) With <AUTOGENERATED>"
build_log: "#Contains the link to view the Actual CI BUILD LOG of the $BINARY <AUTOGENERATED>"
category: "#Contains the $PKG/$PKG_FAMILY's Category"
extra_bins: "#Contains names of related binaries (Only if they belong to same $PKG_FAMILY) of the $PKG/$PKG_FAMILY [Otherwise EMPTY]"
  • Additional Details & Fields
!#A number of things are undocumented/missing from the METADATA.AIO files, these are just examples$(.base | .bin)
-> NeoFetch Style GH Fetch IMG #Binaries that have a Github URL set as .src_url, you can get a neofetch style img
"$(.download_url).ghfetch.png" #Example: https://bin.ajam.dev/x86_64/curl.ghfetch.png
-> NeoFetch Style GH Fetch TXT #Binaries that have a Github URL set as .src_url, you can get a neofetch style ascii txt
"$(.download_url).ghfetch.txt" #Example: https://bin.ajam.dev/x86_64/curl.ghfetch.txt 
-> Github Images/Previews #Binaries that have a Github URL set as .src_url, you can get a preview/thumnail PNG file
"$(.download_url).preview.png" #Example: https://bin.ajam.dev/x86_64/curl.preview.png
$(.pkg)
#Since these are AppImages and the like, icons, desktops etc can be fetched
-> .Desktop Files
"$(.bin.name).desktop" #Example: https://bin.ajam.dev/x86_64/qbittorrent.desktop

-> Icons & .DirIcons
"$(.bin.name).icon.png" #Example: https://bin.ajam.dev/x86_64/qbittorrent.icon.png
"$(.bin.name).DirIcon" #Example: https://bin.ajam.dev/x86_64/qbittorrent.DirIcon (.DirIcon is a copy of .icon.png, downloading both isn't necessary)

-> .Version Files
#This info is also in the metadata, but if for some reason it's not
"$(.name).version" #Example: https://bin.ajam.dev/x86_64/qbittorrent.AppImage.version

-> .Zsync Files
#Though, there now exists appimageupdatetool: https://github.com/AppImageCommunity/AppImageUpdate, you can still use zsync manually if you need it 
"$(.name).zsync" #Example: https://bin.ajam.dev/x86_64/qbittorrent.AppImage.zsync

  • This is a basic example demonstrating how easy it is to work with the Metadata
#-----------------------------------------------------------------------------#
# Host Triplet
echo "$(uname -m)" #either x86_64 or aarch64
#---------------------#
# Append `| jq -r '.$TYPE[].$PROPERTY'` to filter them, for example:
!# Simple example to: list all Pkgs in .bin
curl -qfsSL "https://bin.ajam.dev/$(uname -m)/METADATA.AIO.json" | jq -r '.bin[] | .name'

!#To pretty print anything that matches qbittorrent from .pkg
curl -qfsSL "https://bin.ajam.dev/$(uname -m)/METADATA.AIO.json" | jq -r '.bin[] | select(.name | test("qbittorrent"; "i")) | "---------------------------\n" + (. | to_entries | map("\(.key): \(.value)") | join("\n"))'

image


  • URL Redirects

  • People often ask why there's weird/ugly naming scheme like aarch64_arm64_Linux.
  • Though, at the time I had my reasons (Take a look at any 3-4 cli tools' naming schema that do Github Releases), I admit it's a pain now.
  • Hence, I have set URL Redirects, so as long as your client follows a 301, you can basically use any of these to reach to any $ARCH/$HOST
  • The ones in the Left will Redirect you to Correct Location/Link (Ones in the Right)

Examples:

!# curl needs the `-L, --location` flag to Follow redirects
!# wget works without any flags
!# *Nix --> $(uname -m) will print aarch64/x86_64 [Better: "$(uname -m)-$(uname -s)" ]
!# ADB/Termux --> getprop ro.product.cpu.abi will print arm64-v8a on Android [Better: "$(getprop ro.product.cpu.abi)-$(getprop ro.board.platform)" ]
!# powershell --> $env:PROCESSOR_ARCHITECTURE || cmd.exe --> echo %PROCESSOR_ARCHITECTURE% [Better: "$env:PROCESSOR_ARCHITECTURE-$env:OS" ]

!# Example on Android
curl -qfsSLO "https://bin.ajam.dev/$(getprop ro.product.cpu.abi)/$BIN_OR_PATH_TO_BIN"

!# Example on Linux
curl -qfsSLO "https://bin.ajam.dev/$(uname -m)/$BIN_OR_PATH_TO_BIN"

!# Example on Windows
Invoke-WebRequest -Uri "https://bin.ajam.dev/$env:PROCESSOR_ARCHITECTURE/$BIN_OR_PATH_TO_BIN.exe" -OutFile "$BIN.exe"

image