Compare commits
	
		
			6 Commits
		
	
	
		
			main
			...
			feature/ad
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						6f55f10648 | |
| 
							
							
								
								 | 
						1d5af125a0 | |
| 
							
							
								
								 | 
						7924f3c5cf | |
| 
							
							
								
								 | 
						7f27875bdb | |
| 
							
							
								
								 | 
						4c7296e264 | |
| 
							
							
								
								 | 
						06375de8bd | 
| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					name: Lint and test yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on: [push]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					permissions:
 | 
				
			||||||
 | 
					  contents: read
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  lint_and_test:
 | 
				
			||||||
 | 
					    # if: ${{ !github.event.act }} # Skip during local actions testing
 | 
				
			||||||
 | 
					    if: github.repository == 'garrancode/gocustomurls'
 | 
				
			||||||
 | 
					    runs-on: [ubuntu-latest, self-hosted]
 | 
				
			||||||
 | 
					    # runs-on: [ubuntu-latest]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        # Uses some of the solutions found here (https://github.com/actions/setup-go/issues/450)
 | 
				
			||||||
 | 
					        go-version: ['', 'oldstable', 'stable']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # git show-ref v4.2.2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          fetch-depth: 0
 | 
				
			||||||
 | 
					          persist-credentials: false # https://yossarian.net/til/post/actions-checkout-can-leak-github-credentials/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Setup Go version ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					        uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # git show-ref v5.4.0
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          # Uses the condition found in here (https://github.com/actions/setup-go?tab=readme-ov-file#getting-go-version-from-the-gomod-file)
 | 
				
			||||||
 | 
					          go-version: ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					          go-version-file: 'go.mod'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Lint with ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					        uses: golangci/golangci-lint-action@8564da7cb3c6866ed1da648ca8f00a258ef0c802 # git show-ref v6.5.2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          args: --timeout=3m --verbose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Test with ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          make coverage-full
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					name: Local workflow for act
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on: [workflow_dispatch]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					permissions:
 | 
				
			||||||
 | 
					  contents: read
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  local:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    # image to run with act
 | 
				
			||||||
 | 
					    container:
 | 
				
			||||||
 | 
					      # image url (https://github.com/catthehacker/docker_images/pkgs/container/ubuntu/405021598?tag=act-latest)
 | 
				
			||||||
 | 
					      image: ghcr.io/catthehacker/ubuntu:act-latest-20250429@sha256:ed7b477aa8ba68efd4ebdd6c2cc00728cfecf9780babb04383f481201641e793
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        # Uses some of the solutions found here (https://github.com/actions/setup-go/issues/450)
 | 
				
			||||||
 | 
					        go-version: ['']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # git show-ref v4.2.2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          fetch-depth: 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Setup Go version ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					        uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # git show-ref v5.4.0
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          # Uses the condition found in here (https://github.com/actions/setup-go?tab=readme-ov-file#getting-go-version-from-the-gomod-file)
 | 
				
			||||||
 | 
					          # go-version: ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					          go-version-file: 'go.mod'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Lint with ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					        uses: golangci/golangci-lint-action@8564da7cb3c6866ed1da648ca8f00a258ef0c802 # git show-ref v6.5.2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          args: --timeout=3m --verbose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Test with ${{ matrix.go-version }}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          make coverage-full
 | 
				
			||||||
| 
						 | 
					@ -65,8 +65,8 @@ jbowen.dev/cereal (download)
 | 
				
			||||||
* [x] Figure how to do log rotation as part of this app's function
 | 
					* [x] Figure how to do log rotation as part of this app's function
 | 
				
			||||||
* [x] Add tests
 | 
					* [x] Add tests
 | 
				
			||||||
* [x] Add systemd.service and explanation
 | 
					* [x] Add systemd.service and explanation
 | 
				
			||||||
* [ ] Add Dockerfile and explanation
 | 
					* [x] Add Dockerfile and explanation
 | 
				
			||||||
* [ ] Add mirror to Github
 | 
					* [x] Add mirror to Github
 | 
				
			||||||
* [ ] Add Github action
 | 
					* [ ] Add Github action (self-hosted, [act](https://github.com/nektos/act), Github)
 | 
				
			||||||
* [ ] Figure how to use `goreleaser` [here](https://nfpm.goreleaser.com/) to release deb and rpm packages (so basically split it, goreleaser for github and woodpecker for Woodpecker)
 | 
					* [ ] Figure how to use `goreleaser` [here](https://nfpm.goreleaser.com/) to release deb and rpm packages (so basically split it, goreleaser for github and woodpecker for Woodpecker)
 | 
				
			||||||
* [ ] Update README.md
 | 
					* [ ] Update README.md
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										30
									
								
								handlers.go
								
								
								
								
							
							
						
						
									
										30
									
								
								handlers.go
								
								
								
								
							| 
						 | 
					@ -9,7 +9,10 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func healthcheck(w http.ResponseWriter, r *http.Request) {
 | 
					func healthcheck(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
	w.Write([]byte("ok"))
 | 
						_, err := w.Write([]byte("ok"))
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							fmt.Printf("Error writing ok: %+v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func reloadRules(c *Config) http.HandlerFunc {
 | 
					func reloadRules(c *Config) http.HandlerFunc {
 | 
				
			||||||
| 
						 | 
					@ -20,7 +23,12 @@ func reloadRules(c *Config) http.HandlerFunc {
 | 
				
			||||||
			http.Error(w, e.Error(), http.StatusInternalServerError)
 | 
								http.Error(w, e.Error(), http.StatusInternalServerError)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		w.Write([]byte("ok"))
 | 
							_, err = w.Write([]byte("ok"))
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								e := fmt.Errorf("cannot reload rules: %+v", err)
 | 
				
			||||||
 | 
								http.Error(w, e.Error(), http.StatusInternalServerError)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +47,11 @@ func serveRules(c *Config) http.HandlerFunc {
 | 
				
			||||||
				http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
									http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			w.Write(data)
 | 
								_, err = w.Write(data)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -71,7 +83,11 @@ func serveRules(c *Config) http.HandlerFunc {
 | 
				
			||||||
				http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
									http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			w.Write(data)
 | 
								_, err = w.Write(data)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,6 +110,10 @@ func serveRules(c *Config) http.HandlerFunc {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		w.Header().Set("Cache-Control", "public, max-age=500")
 | 
							w.Header().Set("Cache-Control", "public, max-age=500")
 | 
				
			||||||
		w.Write(buf.Bytes())
 | 
							_, err = w.Write(buf.Bytes())
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								http.Error(w, err.Error(), http.StatusInternalServerError)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										7
									
								
								main.go
								
								
								
								
							
							
						
						
									
										7
									
								
								main.go
								
								
								
								
							| 
						 | 
					@ -52,7 +52,12 @@ func main() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	confFlag := flags.String("conf", "", "Required. Contains all the configurations options")
 | 
						confFlag := flags.String("conf", "", "Required. Contains all the configurations options")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	flags.Parse(os.Args[1:])
 | 
						err := flags.Parse(os.Args[1:])
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							errorLog.Println("Error: cannot parse command-line arguments")
 | 
				
			||||||
 | 
							flags.Usage()
 | 
				
			||||||
 | 
							os.Exit(1)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(flags.Args()) > 1 {
 | 
						if len(flags.Args()) > 1 {
 | 
				
			||||||
		errorLog.Println("Error: too many command-line arguments")
 | 
							errorLog.Println("Error: too many command-line arguments")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +10,10 @@ import (
 | 
				
			||||||
func serveLogger(l *LogFile) func(http.HandlerFunc) http.HandlerFunc {
 | 
					func serveLogger(l *LogFile) func(http.HandlerFunc) http.HandlerFunc {
 | 
				
			||||||
	return func(next http.HandlerFunc) http.HandlerFunc {
 | 
						return func(next http.HandlerFunc) http.HandlerFunc {
 | 
				
			||||||
		return func(w http.ResponseWriter, r *http.Request) {
 | 
							return func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
			l.WriteLog(r)
 | 
								err := l.WriteLog(r)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									fmt.Printf("Error writing log : %+v", err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			next(w, r)
 | 
								next(w, r)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,10 +3,15 @@
 | 
				
			||||||
Also found [here](https://iratusmachina.com/#production-go-systemd-attempt-four)
 | 
					Also found [here](https://iratusmachina.com/#production-go-systemd-attempt-four)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```sh
 | 
					```sh
 | 
				
			||||||
$ cp <BINARY> /usr/local/bin
 | 
					
 | 
				
			||||||
 | 
					$ git clone https://git.iratusmachina.com/iratusmachina/gocustomurls.git gurls
 | 
				
			||||||
 | 
					$ cd gurls
 | 
				
			||||||
 | 
					$ make build
 | 
				
			||||||
 | 
					$ sudo cp <BINARY> /usr/local/bin
 | 
				
			||||||
$ sudo mkdir -p /var/lib/<your user>
 | 
					$ sudo mkdir -p /var/lib/<your user>
 | 
				
			||||||
$ sed -i 's/$MYUSER/<your user>/g' gocustomurls.service
 | 
					$ sed -i 's/$MYUSER/<your user>/g' gocustomurls.service
 | 
				
			||||||
$ sed -i 's/$MYUSER/<your user>/g' config.json
 | 
					$ sed -i 's/$MYUSER/<your user>/g' config.json
 | 
				
			||||||
 | 
					$ // change your port to a port you want, say 9090
 | 
				
			||||||
$ sudo cp gocustomurls.service /etc/systemd/system/
 | 
					$ sudo cp gocustomurls.service /etc/systemd/system/
 | 
				
			||||||
$ sudo useradd --system --comment 'Go Custom Urls Service' --no-create-home <your user>
 | 
					$ sudo useradd --system --comment 'Go Custom Urls Service' --no-create-home <your user>
 | 
				
			||||||
useradd: failed to reset the lastlog entry of UID 992: No such file or directory
 | 
					useradd: failed to reset the lastlog entry of UID 992: No such file or directory
 | 
				
			||||||
| 
						 | 
					@ -34,4 +39,11 @@ $ sudo systemctl status gocustomurls.service
 | 
				
			||||||
        CPU: 14ms
 | 
					        CPU: 14ms
 | 
				
			||||||
     CGroup: /system.slice/gocustomurls.service
 | 
					     CGroup: /system.slice/gocustomurls.service
 | 
				
			||||||
             └─4020 /usr/local/bin/gocustomurls -conf /var/lib/<your user>/config.json
 | 
					             └─4020 /usr/local/bin/gocustomurls -conf /var/lib/<your user>/config.json
 | 
				
			||||||
 | 
					$ http --body "http://<vanity_url>?go-get=1"
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					    <head>
 | 
				
			||||||
 | 
					        ...
 | 
				
			||||||
 | 
					    </head>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,23 +3,30 @@
 | 
				
			||||||
Also found [here](https://iratusmachina.com/#production-go-systemd-attempt-five)
 | 
					Also found [here](https://iratusmachina.com/#production-go-systemd-attempt-five)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```sh
 | 
					```sh
 | 
				
			||||||
 | 
					$ git clone https://git.iratusmachina.com/iratusmachina/gocustomurls.git
 | 
				
			||||||
$ sudo useradd --system --comment 'Go Custom Urls Service' --no-create-home <your user>
 | 
					$ sudo useradd --system --comment 'Go Custom Urls Service' --no-create-home <your user>
 | 
				
			||||||
useradd: failed to reset the lastlog entry of UID 992: No such file or directory
 | 
					useradd: failed to reset the lastlog entry of UID 992: No such file or directory
 | 
				
			||||||
$ sudo passwd -d <your user>
 | 
					$ sudo passwd -d <your user>
 | 
				
			||||||
passwd: password changed.
 | 
					passwd: password changed.
 | 
				
			||||||
$ getent passwd <your user>
 | 
					$ getent passwd <your user>
 | 
				
			||||||
<your user>:x:992:991:Go Custom Urls Service:/home/<your user>:/bin/bash
 | 
					<your user>:x:992:991:Go Custom Urls Service:/home/<your user>:/bin/bash
 | 
				
			||||||
$ sudo mkdir -p /var/lib/<your user>/appfiles/otherfiles
 | 
					$ sudo mkdir -p /var/lib/<your user>/appfiles
 | 
				
			||||||
$ sudo cp docker-compose.yml /var/lib/<your user>/appfiles/
 | 
					$ // change your port in docker-compose.yml to a port you want, say 9090
 | 
				
			||||||
$ sudo cp Dockerfile.1 /var/lib/<your user>/appfiles/Dockerfile
 | 
					$ sudo cp docker-compose.yml /var/lib/<your user>
 | 
				
			||||||
 | 
					$ sudo cp Dockerfile.1 /var/lib/<your user>/Dockerfile
 | 
				
			||||||
$ sed -i 's/$MYUSER/<your user>/g' gocustomurls.service
 | 
					$ sed -i 's/$MYUSER/<your user>/g' gocustomurls.service
 | 
				
			||||||
$ sed -i 's/$MYUSER/<your user>/g' config.json
 | 
					$ sed -i 's/$MYUSER/<your user>/g' config.json
 | 
				
			||||||
$ sudo cp config.json /var/lib/<your user>/appfiles/othefiles
 | 
					$ // change your port in config.json to a port you want, say 9090
 | 
				
			||||||
$ sudo cp rules.json /var/lib/<your user>/appfiles/otherfiles
 | 
					$ sudo cp config.json /var/lib/<your user>/appfiles
 | 
				
			||||||
 | 
					$ sudo cp rules.json /var/lib/<your user>/appfiles
 | 
				
			||||||
$ sudo chmod -R 770 /var/lib/<your user>
 | 
					$ sudo chmod -R 770 /var/lib/<your user>
 | 
				
			||||||
$ sudo chown -R <your user>:<your user> /var/lib/<your user>
 | 
					$ sudo chown -R <your user>:<your user> /var/lib/<your user>
 | 
				
			||||||
$ sudo cp gocustomurls.service /etc/systemd/system/
 | 
					$ sudo cp gocustomurls.service /etc/systemd/system/
 | 
				
			||||||
$ sudo systemctl daemon-reload
 | 
					$ sudo systemctl daemon-reload
 | 
				
			||||||
 | 
					$ // You would get an error with permissions like below
 | 
				
			||||||
 | 
					$ // denied while trying to connect to the Docker daemon socket at unix://var/run/docker.sock 
 | 
				
			||||||
 | 
					$ // solve with the command below
 | 
				
			||||||
 | 
					$ sudo usermod -aG docker <your user>
 | 
				
			||||||
$ sudo systemctl start gocustomurls.service
 | 
					$ sudo systemctl start gocustomurls.service
 | 
				
			||||||
● gocustomurls.service - GocustomUrls. A custom url mapper for go packages!
 | 
					● gocustomurls.service - GocustomUrls. A custom url mapper for go packages!
 | 
				
			||||||
     Loaded: loaded (/etc/systemd/system/gocustomurls.service; disabled; preset: disabled)
 | 
					     Loaded: loaded (/etc/systemd/system/gocustomurls.service; disabled; preset: disabled)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,4 +18,4 @@ services:
 | 
				
			||||||
    ports:
 | 
					    ports:
 | 
				
			||||||
      - "7070:7070"
 | 
					      - "7070:7070"
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - ${PWD}/otherfiles:/home/${USERNAME}
 | 
					      - ${PWD}/appfiles:/home/${USERNAME}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -113,12 +113,12 @@ func walkMatch(t *testing.T, root, pattern string) []string {
 | 
				
			||||||
// 	return !errors.Is(err, fs.ErrNotExist)
 | 
					// 	return !errors.Is(err, fs.ErrNotExist)
 | 
				
			||||||
// }
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func removeFileForTest(t *testing.T, name string) {
 | 
					// func removeFileForTest(t *testing.T, name string) {
 | 
				
			||||||
	err := os.Remove(name)
 | 
					// 	err := os.Remove(name)
 | 
				
			||||||
	if err != nil {
 | 
					// 	if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
					// 		t.Fatal(err)
 | 
				
			||||||
	}
 | 
					// 	}
 | 
				
			||||||
}
 | 
					// }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func writeJsonForTest(t *testing.T, data map[string]any, fp string) {
 | 
					func writeJsonForTest(t *testing.T, data map[string]any, fp string) {
 | 
				
			||||||
	jsonString, _ := json.Marshal(data)
 | 
						jsonString, _ := json.Marshal(data)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue