A container registry that uses the AT Protocol for manifest storage and S3 for blob storage. atcr.io
docker container atproto go
72
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix install instructions

+56 -10
+4 -4
INSTALLATION.md
··· 8 8 9 9 **Linux/macOS:** 10 10 ```bash 11 - curl -fsSL https://atcr.io/install.sh | bash 11 + curl -fsSL https://atcr.io/static/install.sh | bash 12 12 ``` 13 13 14 14 Or download and run manually: 15 15 16 16 ```bash 17 - curl -fsSLO https://atcr.io/install.sh 17 + curl -fsSLO https://atcr.io/static/install.sh 18 18 chmod +x install.sh 19 19 ./install.sh 20 20 ``` ··· 22 22 Custom installation directory: 23 23 24 24 ```bash 25 - INSTALL_DIR=$HOME/.local/bin curl -fsSL https://atcr.io/install.sh | bash 25 + INSTALL_DIR=$HOME/.local/bin curl -fsSL https://atcr.io/static/install.sh | bash 26 26 ``` 27 27 28 28 **Windows (PowerShell as Administrator):** ··· 85 85 docker-credential-atcr version 86 86 ``` 87 87 88 - ### From Source (requires Go 1.23+) 88 + ### From Source (requires Go 1.26+) 89 89 90 90 ```bash 91 91 go install atcr.io/cmd/credential-helper@latest
+1 -1
README.md
··· 54 54 55 55 **1. Install credential helper:** 56 56 ```bash 57 - curl -fsSL https://atcr.io/install.sh | bash 57 + curl -fsSL https://atcr.io/static/install.sh | bash 58 58 ``` 59 59 60 60 **2. Configure Docker** (add to `~/.docker/config.json`):
+4 -4
docs/CREDENTIAL_HELPER.md
··· 68 68 **Usage:** 69 69 ```bash 70 70 # Linux/macOS 71 - curl -fsSL https://atcr.io/install.sh | bash 71 + curl -fsSL https://atcr.io/static/install.sh | bash 72 72 73 73 # Windows (PowerShell) 74 74 iwr -useb https://atcr.io/install.ps1 | iex ··· 113 113 sudo mv $(go env GOPATH)/bin/credential-helper /usr/local/bin/docker-credential-atcr 114 114 ``` 115 115 116 - **Note:** This requires Go 1.23+ and compiles locally. 116 + **Note:** This requires Go 1.26+ and compiles locally. 117 117 118 118 ## Release Process 119 119 ··· 138 138 - Visit: https://github.com/atcr-io/atcr/releases 139 139 - Test install script: 140 140 ```bash 141 - ATCR_VERSION=v1.0.0 curl -fsSL https://atcr.io/install.sh | bash 141 + ATCR_VERSION=v1.0.0 curl -fsSL https://atcr.io/static/install.sh | bash 142 142 docker-credential-atcr version 143 143 ``` 144 144 ··· 266 266 # Clean install in fresh environment 267 267 docker run --rm -it ubuntu:latest bash 268 268 apt update && apt install -y curl 269 - curl -fsSL https://atcr.io/install.sh | bash 269 + curl -fsSL https://atcr.io/static/install.sh | bash 270 270 ``` 271 271 272 272 2. **Test Docker integration:**
+43
pkg/appview/middleware/goimport.go
··· 1 + package middleware 2 + 3 + import ( 4 + "fmt" 5 + "html" 6 + "net/http" 7 + ) 8 + 9 + // GoImport serves the `<meta name="go-import">` tag required by `go install` / 10 + // `go get` to resolve the vanity path `atcr.io/...` to the source repository. 11 + // 12 + // Go tooling requests `https://atcr.io/<subpath>?go-get=1` and expects an HTML 13 + // document with a meta tag of the form: 14 + // 15 + // <meta name="go-import" content="<root> <vcs> <repo-url>"> 16 + // 17 + // The meta tag must be present on every subpath under the module root, so this 18 + // runs as middleware at the top of the chain and short-circuits any request 19 + // carrying `?go-get=1`. 20 + func GoImport(modulePath, repoURL string) func(http.Handler) http.Handler { 21 + body := fmt.Sprintf( 22 + `<!DOCTYPE html><html><head><meta name="go-import" content="%s git %s"><meta name="go-source" content="%s %s %s/tree/main{/dir} %s/tree/main{/dir}/{file}#L{line}"></head><body>go get %s</body></html>`, 23 + html.EscapeString(modulePath), 24 + html.EscapeString(repoURL), 25 + html.EscapeString(modulePath), 26 + html.EscapeString(repoURL), 27 + html.EscapeString(repoURL), 28 + html.EscapeString(repoURL), 29 + html.EscapeString(modulePath), 30 + ) 31 + 32 + return func(next http.Handler) http.Handler { 33 + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 34 + if r.URL.Query().Get("go-get") != "1" { 35 + next.ServeHTTP(w, r) 36 + return 37 + } 38 + w.Header().Set("Content-Type", "text/html; charset=utf-8") 39 + w.Header().Set("Cache-Control", "public, max-age=300") 40 + _, _ = w.Write([]byte(body)) 41 + }) 42 + } 43 + }
+1 -1
pkg/appview/public/static/install.sh
··· 1 1 #!/bin/bash 2 2 # ATCR Credential Helper Installation Script 3 - # Usage: curl -fsSL https://atcr.io/install.sh | bash 3 + # Usage: curl -fsSL https://atcr.io/static/install.sh | bash 4 4 5 5 set -e 6 6
+3
pkg/appview/server.go
··· 298 298 mainRouter.Use(chimiddleware.Recoverer) 299 299 mainRouter.Use(chimiddleware.GetHead) 300 300 mainRouter.Use(routes.CORSMiddleware()) 301 + // Vanity import prefix must match the `module` line in go.mod exactly, 302 + // otherwise `go install` fails the module-path check. 303 + mainRouter.Use(middleware.GoImport("atcr.io", cfg.UI.SourceURL)) 301 304 302 305 // Domain routing middleware 303 306 if len(cfg.Server.RegistryDomains) > 0 {