• Stars
    star
    113
  • Rank 310,115 (Top 7 %)
  • Language
    Rust
  • License
    MIT License
  • Created about 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Aftman, the prodigal sequel to Foreman

Aftman

Aftman is a toolchain manager. It enables installing project-specific command line tools and switching between them seamlessly.

$ rojo --version
Rojo 6.2.0

$ cat ~/.aftman/aftman.toml
[tools]
rojo = "rojo-rbx/[email protected]"

$ cd uses-rojo-7
$ rojo --version
Rojo 7.1.0

$ cat aftman.toml
[tools]
rojo = "rojo-rbx/[email protected]" 

Supported Platforms

Aftman supports:

  • Windows (x86, x86-64)
  • macOS (x86-64, AArch64)
  • Linux (x86, x86-64)

Installation

You can install Aftman by downloading a pre-built binary for your platform from Aftman's GitHub Releases Page.

Once you have the release unzipped, run:

./aftman self-install

This will install Aftman to its own bin directory and update your system's PATH environment variable for you.

Getting Started

To create a new aftman.toml file in your current directory, run

aftman init

To add a new tool, you can follow the instructions in the file, or run

aftman add rojo-rbx/rojo

# install a specific version
aftman add rojo-rbx/[email protected]

# install with a different binary name
aftman add BurntSushi/ripgrep rg

If your PATH is configured correctly (see Installation), you will now be able to run that tool from your project.

To install a tool system-wide so that it can be used anywhere, edit ~/.aftman/aftman.toml or run

aftman add --global rojo-rbx/rojo

To install all tools listed by your aftman.toml files, run

aftman install

Authenticating with GitHub (Aftman 0.2.7+)

If you're running into GitHub rate limits or want to manage private tools hosted on GitHub, you can give Aftman a Personal Access Token.

Generate a Personal Access Token, then edit ~/.aftman/auth.toml to add it:

github = "pat goes here"

Aftman will use this token to authenticate all requests to GitHub.

Subcommands

For detailed help information, run aftman --help.

aftman init

Usage:

aftman init [path]

Creates a new aftman.toml file in the given directory. Defaults to the current directory.

aftman add

Usage:

aftman add [--global] <tool-spec> [tool-alias]

Installs a new tool with the given tool spec and optional alias to use for installing the tool.

Examples:

# Install the latest version of Rojo in the nearest aftman.toml file
aftman add rojo-rbx/rojo

# Install the latest version of Rojo globally
aftman add --global rojo-rbx/rojo

# Install a specific version of Rojo locally
aftman add rojo-rbx/[email protected]

# Install Rojo with a different binary name
aftman add rojo-rbx/[email protected] rojo6

aftman install

Usage:

aftman install [--no-trust-check] [--skip-untrusted]

Install all tools listed in aftman.toml files based on your current directory.

If --no-trust-check is given, all tools will be installed, regardless of whether they are known. This should generally only be used in CI environments. To trust a specific tool before running aftman install, use aftman trust <tool> instead.

If --skip-untrusted is given, only already trusted tools will be installed, others will be skipped and not emit any errors.

aftman self-install

Usage:

aftman self-install

Installs Aftman, upgrades any references to Aftman, and adds aftman to your system PATH if supported.

Whenever you upgrade Aftman, run this command. Aftman makes copies of itself to mimic the tools it installs, and this command will ensure those copies get updated as well.

aftman trust

Usage:

aftman trust <tool-name>

Adds a tool to the list of trusted tools.

Aftman prompts the user before installing new tools. Running aftman trust beforehand skips this prompt. This is useful when running automation that depends on a tool from a known location.

aftman list

Added in Aftman 0.2.6.

Usage:

aftman list

Lists all tools currently managed by Aftman.

aftman update

This subcommand is not yet implemented.

Differences from Foreman

Aftman is spiritually very similar to Foreman, a project I created at Roblox.

I'm hoping to fix some of the core design mistakes I made in Foreman and also take a little more care with the codebase. Roughly:

  • Exact version dependencies. Using a range here has tripped up lots of users, so Aftman uses exact versions in all configuration files.
  • Commands to install, uninstall, and upgrade tools. Editing a global, tucked-away toml file by hand is rough.
  • Change model to no longer trust-by-default. Aftman prompts before downloading new tools. (Roblox/foreman#16).
  • Better strategy for storing executables. (Roblox/foreman#11)
  • Better heuristics for picking the right artifacts for your platform. Aftman uses your Compiler, OS, architecture, and will eventually support custom patterns. (Roblox/foreman#18)
  • Proper error handling. Unlike Foreman, which uses Result::unwrap liberally, Aftman has good error hygiene with helpful context attached.
  • Less Roblox-angled. Aftman does not market itself as being for Roblox development. It is a generally useful tool that can install all sorts of CLI tools.

License

Aftman is available under the terms of the MIT license. See https://opensource.org/licenses/MIT or LICENSE for details.

More Repositories

1

yakui

yakui is a declarative Rust UI library for games
Rust
130
star
2

luajit-request

Simple HTTPS for LuaJIT!
Lua
73
star
3

crevice

Rust crate to generate GLSL structs with explicitly-initialized padding bytes
Rust
65
star
4

thunderdome

Arena type inspired by generational-arena
Rust
63
star
5

luanoid

Alternative to Roblox Humanoids written entirely in Lua
Lua
61
star
6

love-microphone

Simple microphone support for LÖVE
Lua
60
star
7

lemur

Partial implementation of Roblox API in Lua
Lua
55
star
8

luajit-ffipp

(PROTOTYPE) A proof-of-concept C++ FFI for LuaJIT
Lua
30
star
9

nonmax

Rust crate that provides number types similar to std's NonZero* types, but that cannot hold a type's maximum value instead.
Rust
23
star
10

rdc-project

A demo project for RDC 2018 demonstrating Roact and Rodux usage
Lua
22
star
11

roblox-lua-promise

(NO LONGER MAINTAINED) An implementation of promises akin to JavaScript's Promises/A+
Lua
22
star
12

postcss-sassy-import

PostCSS imports like Sass, with extras!
JavaScript
16
star
13

roads

Rojo tech demo
Lua
15
star
14

mab

Style-preserving Lua parser in Rust
Rust
14
star
15

baste

Alternate Lua module system
Lua
13
star
16

snax

JSX-like syntax for proc macro authors
Rust
12
star
17

shunting-rust

An example implementation of the Shunting-yard algorithm in Rust
Rust
11
star
18

ritz

Simple virtual DOM library for Rust with JSX-like syntax powered by Snax
Rust
10
star
19

roact-motion-prototype

A prototype animation implementation similar to React Motion
Lua
8
star
20

keybee

Semantic input library for games in Rust
Rust
7
star
21

global-keys

Global key hooks for LÖVE
Lua
7
star
22

rbx-character-controller

Turned into a hack week 2018 project: https://github.com/LPGhatguy/luanoid
Lua
7
star
23

asink

Primitives for async programming for Roblox Lua
Lua
7
star
24

rukt

Constraint-based box layout engine
Lua
6
star
25

rbxfs

Sync Roblox scripts from the filesystem for easy editing!
Lua
6
star
26

roact-patterns

Examples of common patterns in Roact
Lua
6
star
27

textbox

Logic-only library to manage text box state in Lua UI libraries
Lua
6
star
28

magic-school-bus

Cross-platform TUI filesystem browser with Vi-like keybinds
Rust
5
star
29

small-roblox-libraries

Collection of small, useful Roblox Lua libraries with permissive licenses and no dependencies
Lua
5
star
30

type-layout

Aids debugging Rust type layout
Rust
5
star
31

matchmaker

Version-chooser frontend for LÖVE
Lua
4
star
32

rojo-cicd-test

https://www.roblox.com/my/groups.aspx?gid=4653149
Shell
4
star
33

joyton

Experimenting with ideas for rebindable, semantic input for Roblox games
Lua
4
star
34

rbxpacker

Generates installer packages for Roblox Lua libraries
Lua
4
star
35

rust-c-compiler

Following https://norasandler.com/2017/11/29/Write-a-Compiler.html in Rust
Rust
4
star
36

soquid

A templating framework for Lua
Lua
4
star
37

luajit-stb

(out-of-date) bindings to Sean Barrett's Tool Box (stb) libraries for LuaJIT's FFI
C
3
star
38

all-term

Terminal abstraction library for Rust
Rust
3
star
39

love-polyfill

(LEGACY) LÖVE future features in pure Lua
Lua
3
star
40

lcore

(LEGACY) A modern Lua framework. Made obsolete by Carbon.
Lua
3
star
41

fhtagn

programming environment
JavaScript
3
star
42

rojo-plugin

Merged back into Rojo repository -- https://github.com/LPGhatguy/rojo
Lua
3
star
43

lua-async-http

WIP: Async HTTP interface for Lua 5.1 written in Rust
Rust
3
star
44

parcel-ssg-example

Example of generating a truly static website with Parcel.
JavaScript
2
star
45

roact-windowing

A dead-simple example of how to make a windowed list with Roact
Lua
2
star
46

luajit-benchmarks

Benchmarks of LuaJIT things for reference
Lua
2
star
47

graphite

Integrated into Carbon: https://github.com/lua-carbon/carbon
Lua
2
star
48

igloo

Immutability helpers for Roblox Lua
Lua
2
star
49

rust-lua51-sys

Rust bindings to Lua 5.1.5
C
2
star
50

lpg.space-old

Website hosted at lpg.space.
JavaScript
2
star
51

roact-layout-gadgets

(WIP) Gadgets and components that help lay out complicated interfaces with Roact
Lua
2
star
52

teensy-rust-experiment

Bootstrapping Rust from scratch on the Teensy 3.6
Rust
2
star
53

lua-symbolics

(LEGACY) A symbolic math library for Lua
Lua
2
star
54

aoc2019

Advent of Code 2019 solutions
Rust
1
star
55

coprime-monte-carlo

Monte Carlo simulation of coprime integers on [1, 2^64 - 1]; estimates 1 / zeta(2)
Rust
1
star
56

horriblesoftware.com

Oh, Grandmother, what horrible software you have!
HTML
1
star
57

skyrim-controlmap-editor

Command line tool for working with Skyrim's `controlmap.txt` files.
Rust
1
star
58

rbxplorer

(WIP) Browser-based model/place explorer with Rust, WebAssembly, and React
JavaScript
1
star
59

MSE-Docs

Documentation for MSE (Legacy)
1
star
60

stormtide

something something card game rules engine
Rust
1
star
61

ld48-depth-first-search

1
star