Files
Georgios Komninos 3b0f0b6b7d Golang1.24.3 (#144)
* chore: Uses latest golang version 1.24.3

* chore: Updates dependencies versions

* chore: Exits with code 0 when job finish

* chore: Updates README to include the required golang version

* chore: go mod tidy
2025-05-10 09:06:07 +03:00

85 lines
1.8 KiB
Go

package main
import (
"context"
"errors"
"fmt"
"log"
"os"
"os/signal"
"syscall"
"github.com/gosom/google-maps-scraper/runner"
"github.com/gosom/google-maps-scraper/runner/databaserunner"
"github.com/gosom/google-maps-scraper/runner/filerunner"
"github.com/gosom/google-maps-scraper/runner/installplaywright"
"github.com/gosom/google-maps-scraper/runner/lambdaaws"
"github.com/gosom/google-maps-scraper/runner/webrunner"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
runner.Banner()
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
go func() {
<-sigChan
log.Println("Received signal, shutting down...")
cancel()
}()
cfg := runner.ParseConfig()
runnerInstance, err := runnerFactory(cfg)
if err != nil {
cancel()
os.Stderr.WriteString(err.Error() + "\n")
runner.Telemetry().Close()
os.Exit(1)
}
if err := runnerInstance.Run(ctx); err != nil && !errors.Is(err, context.Canceled) {
os.Stderr.WriteString(err.Error() + "\n")
_ = runnerInstance.Close(ctx)
runner.Telemetry().Close()
cancel()
os.Exit(1)
}
_ = runnerInstance.Close(ctx)
runner.Telemetry().Close()
cancel()
os.Exit(0)
}
func runnerFactory(cfg *runner.Config) (runner.Runner, error) {
switch cfg.RunMode {
case runner.RunModeFile:
return filerunner.New(cfg)
case runner.RunModeDatabase, runner.RunModeDatabaseProduce:
return databaserunner.New(cfg)
case runner.RunModeInstallPlaywright:
return installplaywright.New(cfg)
case runner.RunModeWeb:
return webrunner.New(cfg)
case runner.RunModeAwsLambda:
return lambdaaws.New(cfg)
case runner.RunModeAwsLambdaInvoker:
return lambdaaws.NewInvoker(cfg)
default:
return nil, fmt.Errorf("%w: %d", runner.ErrInvalidRunMode, cfg.RunMode)
}
}