upgrade flake + wip alba static push
This commit is contained in:
parent
5f8c80ce21
commit
cde5c6ad29
4 changed files with 2858 additions and 40 deletions
105
cmd/static.go
105
cmd/static.go
|
@ -1,26 +1,127 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"github.com/spf13/cobra"
|
||||
"gocloud.dev/blob"
|
||||
_ "gocloud.dev/blob/s3blob"
|
||||
)
|
||||
|
||||
type Platform struct {
|
||||
OS string
|
||||
Arch string
|
||||
Root string
|
||||
Files []string
|
||||
}
|
||||
|
||||
func CollectPlatforms(path string) ([]Platform, error) {
|
||||
var p []Platform
|
||||
|
||||
osDirList, err := os.ReadDir(path)
|
||||
if err != nil {
|
||||
return p, err
|
||||
}
|
||||
|
||||
// Collect platforms
|
||||
for _, osDir := range osDirList {
|
||||
archDirList, err := os.ReadDir(filepath.Join(path, osDir.Name()))
|
||||
if err != nil {
|
||||
return p, err
|
||||
}
|
||||
for _, archDir := range archDirList {
|
||||
root := filepath.Join(path, osDir.Name(), archDir.Name())
|
||||
files, err := os.ReadDir(root)
|
||||
|
||||
var filenames []string
|
||||
for _, f := range files {
|
||||
filenames = append(filenames, f.Name())
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return p, err
|
||||
}
|
||||
plat := Platform {
|
||||
OS: osDir.Name(),
|
||||
Arch: archDir.Name(),
|
||||
Root: root,
|
||||
Files: filenames,
|
||||
}
|
||||
p = append(p, plat)
|
||||
}
|
||||
}
|
||||
|
||||
return p, nil
|
||||
}
|
||||
|
||||
type Artifact struct {
|
||||
Name string
|
||||
Tag string
|
||||
Platforms []Platform
|
||||
}
|
||||
|
||||
func NewArtifact(nametag, path string) (Artifact, error) {
|
||||
ntspl := strings.Split(nametag, ":")
|
||||
if len(ntspl) != 2 {
|
||||
return Artifact{}, errors.New("nametag must be of the form 'name:tag'")
|
||||
}
|
||||
|
||||
ar := Artifact{
|
||||
Name: ntspl[0],
|
||||
Tag: ntspl[1],
|
||||
}
|
||||
|
||||
plat, err := CollectPlatforms(path)
|
||||
if err != nil {
|
||||
return ar, err
|
||||
}
|
||||
ar.Platforms = plat
|
||||
|
||||
return ar, nil
|
||||
}
|
||||
|
||||
var staticCmd = &cobra.Command{
|
||||
Use: "static",
|
||||
Short: "Manage static artifacts",
|
||||
Long: "There are many ways to ship software, one is simply to publish a bunch of files on a mirror.",
|
||||
}
|
||||
|
||||
var tag string
|
||||
var publishCmd = &cobra.Command{
|
||||
Use: "publish",
|
||||
Use: "publish [folder] [remote]", // https://gocloud.dev/howto/blob/#s3-compatible
|
||||
Short: "Publish a static artifact",
|
||||
Long: "Sending logic for a static artifact",
|
||||
Args: cobra.ExactArgs(2),
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
fmt.Println("Hugo Static Site Generator v0.9 -- HEAD")
|
||||
localFolder := args[0]
|
||||
remoteUrl := args[1]
|
||||
|
||||
art, err := NewArtifact(tag, localFolder)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Printf("%#v\n", art)
|
||||
|
||||
bucket, err := blob.OpenBucket(context.Background(), remoteUrl)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
defer bucket.Close()
|
||||
|
||||
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
publishCmd.Flags().StringVarP(&tag, "tag", "t", "", "Tag of the project, eg. albatros:0.9")
|
||||
publishCmd.MarkFlagRequired("tag")
|
||||
|
||||
staticCmd.AddCommand(publishCmd)
|
||||
RootCmd.AddCommand(staticCmd)
|
||||
}
|
||||
|
|
24
flake.nix
24
flake.nix
|
@ -15,13 +15,21 @@
|
|||
};
|
||||
|
||||
# declare the go module of this package, allow for cross compilation
|
||||
gopkg = arch: (pkgs.buildGoModule rec {
|
||||
albatrosStaticBin = arch: (pkgs.buildGoModule rec {
|
||||
pname = "albatros-go-module";
|
||||
version = "0.9";
|
||||
src = ./.;
|
||||
CGO_ENABLED = 0;
|
||||
vendorSha256 = "sha256-Q7gImRoJqtcORpHLQoF3TRK2WJu3tKSjSE3Sno6lNNk=";
|
||||
checkPhase = "true";
|
||||
vendorSha256 = "sha256-jzRYYsopJDYsar0nSYkTAOCGf4z20sgpDQ/eFmwYzM8=";
|
||||
checkPhase = ''
|
||||
true
|
||||
'';
|
||||
buildPhase = ''
|
||||
go build bin/albatros.go
|
||||
'';
|
||||
installPhase = ''
|
||||
cp albatros $out
|
||||
'';
|
||||
meta = with pkgs.lib; {
|
||||
description = "albatros is a CI for Nomad";
|
||||
homepage = "https://git.deuxfleurs.fr/quentin/albatros";
|
||||
|
@ -30,16 +38,6 @@
|
|||
};
|
||||
}).overrideAttrs (old: old // { GOOS = "linux"; GOARCH = arch; });
|
||||
|
||||
# logic to build static binaries
|
||||
albatrosStaticBin = arch: pkgs.stdenv.mkDerivation {
|
||||
pname = "albatros";
|
||||
version = "0.9";
|
||||
unpackPhase = "true";
|
||||
installPhase = ''
|
||||
cp `find ${gopkg arch}/bin -name albatros` $out
|
||||
'';
|
||||
};
|
||||
|
||||
# logic to build docker containers
|
||||
docker = staticBin: arch: pkgs.dockerTools.buildImage {
|
||||
name = "dxflrs/albatros";
|
||||
|
|
54
go.mod
54
go.mod
|
@ -8,28 +8,62 @@ require (
|
|||
github.com/hashicorp/consul/api v1.20.0
|
||||
github.com/hashicorp/nomad/api v0.0.0-20230314144600-1a01e8719272
|
||||
github.com/spf13/cobra v1.7.0
|
||||
golang.org/x/exp v0.0.0-20230108222341-4b8118a2686a
|
||||
gocloud.dev v0.29.0
|
||||
golang.org/x/exp v0.0.0-20230124195608-d38c7dcee874
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect
|
||||
github.com/fatih/color v1.9.0 // indirect
|
||||
github.com/armon/go-metrics v0.3.10 // indirect
|
||||
github.com/aws/aws-sdk-go v1.44.200 // indirect
|
||||
github.com/aws/aws-sdk-go-v2 v1.17.4 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/config v1.18.12 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.13.12 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.22 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.51 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.28 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.22 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.29 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.19 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.23 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.22 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.22 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.30.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.12.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.18.3 // indirect
|
||||
github.com/aws/smithy-go v1.13.5 // indirect
|
||||
github.com/fatih/color v1.13.0 // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
github.com/google/wire v0.5.0 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.7.0 // indirect
|
||||
github.com/gorilla/websocket v1.5.0 // indirect
|
||||
github.com/hashicorp/cronexpr v1.1.1 // indirect
|
||||
github.com/hashicorp/errwrap v1.0.0 // indirect
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||
github.com/hashicorp/go-hclog v0.12.0 // indirect
|
||||
github.com/hashicorp/go-immutable-radix v1.0.0 // indirect
|
||||
github.com/hashicorp/go-hclog v1.2.0 // indirect
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
||||
github.com/hashicorp/go-version v1.2.1 // indirect
|
||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||
github.com/hashicorp/golang-lru v0.6.0 // indirect
|
||||
github.com/hashicorp/serf v0.10.1 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.6 // indirect
|
||||
github.com/mattn/go-isatty v0.0.12 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.12 // indirect
|
||||
github.com/mattn/go-isatty v0.0.14 // indirect
|
||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
golang.org/x/sys v0.1.0 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
golang.org/x/net v0.6.0 // indirect
|
||||
golang.org/x/sys v0.5.0 // indirect
|
||||
golang.org/x/text v0.7.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||
google.golang.org/api v0.110.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc // indirect
|
||||
google.golang.org/grpc v1.53.0 // indirect
|
||||
google.golang.org/protobuf v1.28.1 // indirect
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue