92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
|
|
"dagger.io/dagger"
|
|
"github.com/joho/godotenv"
|
|
"golang.org/x/sync/errgroup"
|
|
)
|
|
|
|
func Ci(ctx context.Context) error {
|
|
_ = godotenv.Load()
|
|
|
|
client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stdout))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.Close()
|
|
|
|
drone := client.
|
|
Container(dagger.ContainerOpts{Platform: "linux/amd64"}).
|
|
From("debian").
|
|
WithExec([]string{
|
|
"apt", "update",
|
|
}).
|
|
WithExec([]string{
|
|
"apt", "install", "-y", "wget", "tar",
|
|
}).
|
|
WithExec([]string{
|
|
"wget", "https://github.com/harness/drone-cli/releases/latest/download/drone_linux_amd64.tar.gz",
|
|
}).
|
|
WithExec([]string{
|
|
"tar", "-xvf", "drone_linux_amd64.tar.gz",
|
|
}).
|
|
WithExec([]string{
|
|
"mv", "drone", "/usr/local/bin",
|
|
}).
|
|
WithExec([]string{
|
|
"drone", "--version",
|
|
})
|
|
|
|
_, err = drone.ExitCode(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
templates := client.Host().Directory("templates")
|
|
droneTemplates := drone.
|
|
WithEnvVariable("DRONE_SERVER", "https://ci.i.kjuulh.io").
|
|
WithEnvVariable("DRONE_TOKEN", os.Getenv("DRONE_TOKEN")).
|
|
WithExec([]string{"drone", "info"}).
|
|
WithMountedDirectory("/mnt/templates", templates).
|
|
WithWorkdir("/mnt/templates")
|
|
|
|
entries, err := templates.Entries(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
egrp, _ := errgroup.WithContext(ctx)
|
|
for _, entry := range entries {
|
|
entry := entry
|
|
egrp.Go(func() error {
|
|
name := path.Base(entry)
|
|
namespace := "kjuulh"
|
|
|
|
log.Printf("running for: %s", entry)
|
|
|
|
_, err := droneTemplates.
|
|
WithExec([]string{
|
|
"sh", "-c", fmt.Sprintf("drone template add --namespace %s --name %s --data @%s || true", namespace, name, name),
|
|
}).
|
|
WithExec([]string{
|
|
"drone", "template", "update", "--namespace", namespace, "--name", name, "--data", fmt.Sprintf("@%s", name),
|
|
}).
|
|
ExitCode(ctx)
|
|
|
|
return err
|
|
})
|
|
}
|
|
|
|
if err := egrp.Wait(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|