The Go Vanity URL Server simplifies creating custom URLs for Go packages, particularly those hosted on GitHub. It acts as a redirection service, facilitating go get operations for your customized package paths.
- Configurable via a simple YAML file.
- Supports custom paths for Go packages.
- Designed for straightforward enhancements and easy maintenance.
-
Go Installation: This project requires Go 1.22 or higher. You can verify your Go version with:
go version
-
Clone the Repository: Clone the project to your local environment:
git clone https://github.com/Codycody31/go-vanity.git cd go-vanity -
Build the Server: Compile the server from the source code:
go build -o vanity go.codycody31.dev/vanity/cmd/vanity
To run the server:
./vanityBy default, the server utilizes vanity.yaml from the current directory and listens on port 8080. You can access http://localhost:8080/your-package-path to test the redirection.
The server's behavior is controlled through the vanity.yaml file. Here’s an example configuration that specifies the domain and package repositories:
domain: "go.example.com"
packages:
- path: "mylib"
repo: "https://github.com/username/mylib"
vcs: "git"
- path: "myotherlib"
repo: "https://github.com/username/myotherlib"
vcs: "git"domain: Your custom domain for hosting Go packages.packages: A list of packages with their paths and repository URLs.
If would would like to ensure the info your are setting is correct: you can either add # yaml-language-server: $schema=schema/vanity-schema.json to the top of your vanity.yaml file if using VSCode in the project, or you can add # yaml-language-server: $schema=https://raw.githubusercontent.com/Codycody31/go-vanity/main/schema/vanity-schema.json to the top of your vanity.yaml file if using any other editor or if you don't have the schema locally.
Environment Variables:
VANITY_CONFIG: Set this to specify a local path to an alternative configuration file.VANITY_CONFIG_URL: Set this to specify a URL where the configuration file can be fetched, useful for centralized configuration management.
You can set environment variables directly or include them in a startup script:
export VANITY_PORT="8080"
export VANITY_CONFIG="/path/to/your/vanity.yaml"
export VANITY_CONFIG_URL="https://example.com/vanity.yaml"
./vanityHere is an example of how to use the Go Vanity URL Server with the provided configuration:
domain: "go.codycody31.dev"
disableRootPackagesPage: false
poweredBy: true
packages:
- path: "vanity"
repo: "https://github.com/Codycody31/go-vanity"
vcs: "git"
- path: "woodpecker/woodpecker/v2"
repo: "https://github.com/woodpecker/woodpecker"
vcs: "git"
- path: "woodpecker/woodpecker/v3"
repo: "https://github.com/woodpecker/woodpecker"
vcs: "git"
- path: "logger"
repo: "https://github.com/Codycody31/logger"
vcs: "git"With this configuration, you can access the following packages:
go get go.codycody31.dev/vanitygo get go.codycody31.dev/woodpecker/woodpecker/v2go get go.codycody31.dev/woodpecker/woodpecker/v3go get go.codycody31.dev/logger
And the server will redirect the requests to the respective GitHub repositories. We also provide a simple web page to display the list of available packages, this does however result in the root path being redirected to the web page, and not supporting the root path for a package.
- Docker Installed: Ensure you have Docker installed on your system. You can check by running
docker --version. If not installed, you can download it from the official Docker website.
You can pull the pre-built Docker image from the Docker Hub using the following command:
docker pull insidiousfiddler/vanity-
Using a Local Configuration File: To run the server using a local configuration file, you can mount the configuration directory to the Docker container. Make sure your
vanity.yamlfile is in a suitable directory, then use the following command to start the server:docker run -p 8080:8080 -v /path/to/your/config/directory:/etc/vanity insidiousfiddler/vanity
This command mounts your local directory containing the
vanity.yamlat/etc/vanityinside the container, which is the default path the Docker image expects for the configuration file. -
Using a Remote Configuration File: If you prefer to fetch the configuration from a remote URL, set the
VANITY_CONFIG_URLenvironment variable when running the Docker container:docker run -p 8080:8080 -e VANITY_CONFIG_URL="https://example.com/vanity.yaml" insidiousfiddler/vanityThis setup is useful for centralized configuration management, allowing you to update the configuration without rebuilding or restarting containers manually.
For more advanced Docker configurations, such as network settings, logging configurations, or using Docker Compose, you can create a docker-compose.yml file or extend the Docker run commands with additional parameters as per your requirements.
We welcome contributions from the community. To contribute:
- Fork the repository.
- Create a new branch for your feature (
git checkout -b feature/AmazingFeature). - Commit your changes (
git commit -am 'Add some AmazingFeature'). - Push to the branch (
git push origin feature/AmazingFeature). - Submit a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.
