gci is configured with the sections standard, default and localmodule, and goimports with the module path as its local prefix, so both formatters agree.
92 lines
2.4 KiB
Go
92 lines
2.4 KiB
Go
/*
|
|
Copyright © 2026 Craig Williams <craig@avsdev.uk>
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Lesser General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
// Command job-search. Run `job-search --help` for usage.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"git.avsdev.uk/Go/job-search/internal/cli"
|
|
"git.avsdev.uk/Go/job-search/internal/cli/config"
|
|
"git.avsdev.uk/Go/job-search/internal/cli/fetch"
|
|
"git.avsdev.uk/Go/job-search/internal/cli/migrate"
|
|
"git.avsdev.uk/Go/job-search/internal/cli/version"
|
|
"git.avsdev.uk/Go/job-search/internal/cli/wsserve"
|
|
)
|
|
|
|
// newRootCmd builds the command tree. It returns a fresh tree on each call so
|
|
// tests can run commands in isolation.
|
|
func newRootCmd() *cobra.Command {
|
|
opts := &cli.Options{}
|
|
|
|
root := &cobra.Command{
|
|
Use: "job-search",
|
|
Short: "JobSearch - AVSDev Future Opportunities!",
|
|
Long: `JobSearch is a scraping tool for searching for possible contract
|
|
opportunities.
|
|
`,
|
|
SilenceUsage: true, // don't print usage on runtime errors
|
|
SilenceErrors: true, // main prints the error once
|
|
CompletionOptions: cobra.CompletionOptions{
|
|
HiddenDefaultCmd: true,
|
|
},
|
|
PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
|
|
cli.SetupInitialLogging(cmd)
|
|
|
|
slog.Debug("root.PersistentPreRun")
|
|
slog.Debug(
|
|
"command: \"" +
|
|
strings.Join(strings.Split(cmd.CommandPath(), " ")[1:], " ") +
|
|
"\"",
|
|
)
|
|
|
|
return nil
|
|
},
|
|
PersistentPostRunE: func(cmd *cobra.Command, args []string) error {
|
|
slog.Debug("root.PersistentPostRun")
|
|
|
|
return opts.Finish()
|
|
},
|
|
}
|
|
|
|
cobra.EnableTraverseRunHooks = true
|
|
|
|
opts.Bind(root)
|
|
|
|
root.AddCommand(
|
|
version.NewCommand(),
|
|
config.NewCommand(opts),
|
|
fetch.NewCommand(opts),
|
|
migrate.NewCommand(opts),
|
|
wsserve.NewCommand(opts),
|
|
)
|
|
|
|
return root
|
|
}
|
|
|
|
func main() {
|
|
if err := newRootCmd().Execute(); err != nil {
|
|
fmt.Fprintln(os.Stderr, "job-search:", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|