diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 83b4c03..e984108 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,6 +19,18 @@ jobs: uses: actions/setup-go@v2 with: go-version: 1.15 + - + name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GH_GORELEASER_TOKEN }} + - + name: Install Snapcraft and Log In + uses: samuelmeuli/action-snapcraft@v1 + with: + snapcraft_token: ${{ secrets.SNAPCRAFT_TOKEN }} - name: Run GoReleaser uses: goreleaser/goreleaser-action@v2 @@ -26,5 +38,5 @@ jobs: version: latest args: release --rm-dist env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # SNAPCRAFT_TOKEN: ${{ secrets.SNAPCRAFT_TOKEN }} + DOCKER_CLI_EXPERIMENTAL: enabled + GITHUB_TOKEN: ${{ secrets.GH_GORELEASER_TOKEN }} diff --git a/.goreleaser.yml b/.goreleaser.yml index fda8c98..a838490 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -24,14 +24,14 @@ archives: - README.md - LICENSE -# snapcrafts: -# - name_template: "{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}" -# summary: DNS Command-line client. -# description: | -# doggo is a command-line DNS client written in Go. It supports protocols like DoH, DoT and output formats like JSON. -# grade: stable -# confinement: strict -# publish: true +snapcrafts: + - name_template: "{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}" + summary: Command-line DNS client. + description: | + doggo is a command-line DNS client written in Go. It supports protocols like DoH, DoT and output formats like JSON. + grade: stable + confinement: strict + publish: true dockers: - image_templates: @@ -45,6 +45,7 @@ dockers: - "ARCH=amd64" - image_templates: - "ghcr.io/mr-karan/doggo:{{ .Tag }}-arm64v8" + - "ghcr.io/mr-karan/doggo:latest-arm64v8" binaries: - doggo goarch: arm64 @@ -52,8 +53,3 @@ dockers: build_flag_templates: - "--build-arg" - "ARCH=arm64v8" -docker_manifests: -- name_template: mr-karan/doggo:{{ .Tag }} - image_templates: - - mr-karan/doggo:{{ .Tag }}-amd64 - - mr-karan/doggo:{{ .Tag }}-arm64v8 diff --git a/README.md b/README.md index b2378a0..59dfe72 100644 --- a/README.md +++ b/README.md @@ -10,31 +10,61 @@ --- -`doggo` is a modern command-line DNS client (like _dig_) written in Golang. It outputs information in a neat concise manner and supports protocols like DoH, DoT as well. +**doggo** is a modern command-line DNS client (like _dig_) written in Golang. It outputs information in a neat concise manner and supports protocols like DoH, DoT as well. It's totally inspired from [dog](https://github.com/ogham/dog/) which is written in Rust. I wanted to add some features to it but since I don't know Rust, I found it as a nice oppurtunity -to experiment with writing a DNS Client from scratch in `Go` myself. Hence the name `dog` +`go` => `doggo`. +to experiment with writing a DNS Client from scratch in `Go` myself. Hence the name `dog` +`go` => **doggo**. ## Features -- Human readable output - Supports colors and tabular format. -- Supports JSON format - useful for writing scripts. +- Human readable output - supports **colors** and **tabular** format. +- Supports **JSON** format - can be useful while writing scripts. - Has support for multiple transport protocols: - DNS over **HTTPS** (DoH) - DNS over **TLS** (DoT) - DNS over **TCP** - DNS over **UDP** - Supports **ndots** and **search** configurations from `resolv.conf` or command-line arguments. -- Supports multiple resolvers in one go. +- Supports multiple resolvers at once. - Supports IPv4 **and** IPv6 _both_. ## Installation -### Binary (Recommended) +### Binary +```shell +$ cd "$(mktemp -d)" +$ curl -sL "https://github.com/mr-karan/doggo/releases/download/v0.1.0/doggo_0.1.0_linux_amd64.tar.gz" | tar xz +$ mv doggo /usr/local/bin +# doggo should be available now in your $PATH +$ doggo +``` ### Docker -### Snap +Images are hosted on Github Container Registry (ghcr.io). +You can view all the tags [here](https://github.com/users/mr-karan/packages/container/package/doggo). It even supports **ARM** so you can spin up a container on your RPi to do DNS lookups, cause why not. + +**Pull** + +`docker pull ghcr.io/mr-karan/doggo:latest` + +**Running** + +You can supply all arguments to the CLI directly to `docker run` command. Eg: + +`docker run ghcr.io/mr-karan/doggo:latest mrkaran.dev @1.1.1.1 MX` + +### Using snap + +[![Get it from the Snap Store](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/doggo) + +```sh +$ sudo snap install doggo +``` + +**NOTE**: Since the [confinement](https://snapcraft.io/docs/snap-confinement) mode is strict as of now, it cannot access your host's `/etc/resolv.conf`. +I'll be making a request in the Snap forums soon so that it can be manually reviewed and allowed to use `--classic`. Until then, please specify a namesever manually +if using `snap`. ## Usage Examples @@ -181,7 +211,8 @@ URL scheme of the server is used to identify which resolver to use for lookups. ## Contributing -I'm open to accept feature requests and/or issues. I understand `doggo` is a very new DNS Client in the town and there might be some edge cases I am not handling. Please feel free to open issues if you ever come across such a case. +I'm open to accept feature requests and/or issues. I understand `doggo` is a new DNS Client in the town and there might be some edge cases I am not handling. +Please feel free to open issues if you ever come across such a case. For now I am focussing more on [planned features](TODO.md) for a **stable** v1.0 release _soon_. ## License diff --git a/www/static/usage.png b/www/static/usage.png index 14af461..e0db5fa 100644 Binary files a/www/static/usage.png and b/www/static/usage.png differ