Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ func main() {
|-----------|-----------|-----------|
| alpine | APKBUILD | |
| arch | PKGBUILD | |
| asdf | .tool-versions | |
| bazel | MODULE.json | |
| bower | bower.json | |
| brew | Brewfile | Brewfile.lock.json |
Expand Down
1 change: 1 addition & 0 deletions imports.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package manifests
import (
_ "github.com/git-pkgs/manifests/internal/alpine"
_ "github.com/git-pkgs/manifests/internal/arch"
_ "github.com/git-pkgs/manifests/internal/asdf"
_ "github.com/git-pkgs/manifests/internal/bazel"
_ "github.com/git-pkgs/manifests/internal/brew"
_ "github.com/git-pkgs/manifests/internal/cargo"
Expand Down
43 changes: 43 additions & 0 deletions internal/asdf/asdf.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package asdf

import (
"strings"

"github.com/git-pkgs/manifests/internal/core"
)

func init() {
core.Register("asdf", core.Manifest, &toolVersionsParser{}, core.ExactMatch(".tool-versions"))
}

// toolVersionsParser parses .tool-versions files.
type toolVersionsParser struct{}

func (p *toolVersionsParser) Parse(filename string, content []byte) ([]core.Dependency, error) {
var deps []core.Dependency
lines := strings.Split(string(content), "\n")

for _, line := range lines {
line = strings.TrimSpace(line)
if line == "" || strings.HasPrefix(line, "#") {
continue
}

fields := strings.Fields(line)
if len(fields) < 2 {
continue
}

name := fields[0]
version := fields[1]

deps = append(deps, core.Dependency{
Name: name,
Version: version,
Scope: core.Runtime,
Direct: true,
})
}

return deps, nil
}
48 changes: 48 additions & 0 deletions internal/asdf/asdf_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package asdf

import (
"os"
"testing"
)

func TestToolVersions(t *testing.T) {
content, err := os.ReadFile("../../testdata/asdf/.tool-versions")
if err != nil {
t.Fatalf("failed to read fixture: %v", err)
}

parser := &toolVersionsParser{}
deps, err := parser.Parse(".tool-versions", content)
if err != nil {
t.Fatalf("Parse failed: %v", err)
}

if len(deps) != 6 {
t.Fatalf("expected 6 dependencies, got %d", len(deps))
}

depMap := make(map[string]string)
for _, d := range deps {
depMap[d.Name] = d.Version
}

expected := map[string]string{
"nodejs": "18.12.0",
"ruby": "3.2.1",
"python": "3.11.2",
"golang": "1.21.0",
"erlang": "26.0.2",
"rust": "1.72.0",
}

for name, wantVer := range expected {
gotVer, ok := depMap[name]
if !ok {
t.Errorf("expected %s dependency", name)
continue
}
if gotVer != wantVer {
t.Errorf("%s version = %q, want %q", name, gotVer, wantVer)
}
}
}
8 changes: 8 additions & 0 deletions testdata/asdf/.tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
nodejs 18.12.0
ruby 3.2.1
python 3.11.2
# this is a comment
golang 1.21.0
erlang 26.0.2

rust 1.72.0