Skip to content

Commit

Permalink
build slink
Browse files Browse the repository at this point in the history
Signed-off-by: Nianyu Shen <[email protected]>
  • Loading branch information
nianyush committed May 9, 2024
1 parent 3ac44d2 commit 6cb9a27
Show file tree
Hide file tree
Showing 7 changed files with 166 additions and 105 deletions.
48 changes: 42 additions & 6 deletions Earthfile
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ ARG CMDLINE="stylus.registration"
ARG BRANDING="Palette eXtended Kubernetes Edge"
ARG ETCD_VERSION="v3.5.13"

# internal variables
ARG GOLANG_VERSION=1.22

IF [ "$OS_DISTRIBUTION" = "ubuntu" ] && [ "$BASE_IMAGE" = "" ]
IF [ "$OS_VERSION" == 22 ] || [ "$OS_VERSION" == 20 ]
ARG BASE_IMAGE_TAG=kairos-$OS_DISTRIBUTION:$OS_VERSION.04-core-$ARCH-generic-$KAIROS_VERSION
Expand Down Expand Up @@ -296,12 +299,6 @@ install-k8s:
RUN rm -rf /output/var/cache/*
SAVE ARTIFACT /output/*

internal-slink:
FROM --platform=linux/${ARCH} alpine
COPY internal/slink/slink /slink
RUN chmod +x /slink
SAVE ARTIFACT /slink

build-uki-iso:
FROM --platform=linux/${ARCH} $OSBUILDER_IMAGE
ENV ISO_NAME=${ISO_NAME}
Expand Down Expand Up @@ -759,6 +756,45 @@ iso-disk-image:
SAVE IMAGE --push $IMAGE_REGISTRY/$IMAGE_REPO/$ISO_NAME:$PE_VERSION
END

go-deps:
FROM $SPECTRO_PUB_REPO/golang:${GOLANG_VERSION}-alpine
RUN apk add libc-dev binutils-gold clang


BUILD_GOLANG:
COMMAND
ARG WORKDIR=/build
WORKDIR $WORKDIR

ARG BIN
ARG SRC
ARG GOOS
ARG GOARCH
ARG VERSION=dev

ENV GOOS=$GOOS
ENV GOARCH=$GOARCH
ENV GO_LDFLAGS=" -X github.com/spectrocloud/stylus/pkg/version.Version=${VERSION} -w -s"

ENV CC=clang
RUN go mod download
RUN go-build-static.sh -a -o ${BIN} ./${SRC}

SAVE ARTIFACT ${BIN} ${BIN} AS LOCAL build/${BIN}

internal-slink:
FROM +go-deps

WORKDIR /build
COPY internal internal

ARG BUILD_DIR=/build/internal
WORKDIR $BUILD_DIR

DO +BUILD_GOLANG --BIN=slink --SRC=cmd/slink/slink.go --WORKDIR=$BUILD_DIR

SAVE ARTIFACT slink

OS_RELEASE:
COMMAND
ARG OS_ID=${OS_DISTRIBUTION}
Expand Down
62 changes: 62 additions & 0 deletions internal/cmd/slink/slink.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package main

import (
"os"
"path/filepath"

"github.com/sirupsen/logrus"
"github.com/spectrocloud/CanvOS/internal/pkg/utils"
"github.com/spf13/cobra"
"github.com/twpayne/go-vfs/v5"
)

func slink(cmd *cobra.Command, args []string) {
source := cmd.Flag("source").Value.String()
target := cmd.Flag("target").Value.String()
logrus.Infof("Source: %s, Target: %s", source, target)
if source == "" || target == "" {
logrus.Fatal("Source and target must be provided")
}

sourceFS := vfs.NewPathFS(vfs.OSFS, source)

if err := vfs.Walk(sourceFS, "/", func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}

// Create symlink
linkname := path
targetname := filepath.Join(target, path)
logrus.Infof("Creating link %s to %s", linkname, targetname)

if err := utils.CopyDir(filepath.Dir(linkname), sourceFS, vfs.OSFS); err != nil {
logrus.Errorf("Error creating directory: %s", err)
return err
}

if err := os.Symlink(targetname, linkname); err != nil {
logrus.Errorf("Error creating symlink: %s", err)
return err
}

return nil
}); err != nil {
logrus.Fatalf("Error walking source directory: %s", err)
}
}

func main() {
cmd := &cobra.Command{
Use: "slink",
Run: slink,
}
cmd.Flags().StringP("source", "s", "", "source directory")
cmd.Flags().StringP("target", "t", "", "target prefix")
if err := cmd.Execute(); err != nil {
logrus.Fatal(err)
}
}
4 changes: 3 additions & 1 deletion internal/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ module github.com/spectrocloud/CanvOS/internal
go 1.22.0

require (
github.com/sirupsen/logrus v1.9.3
github.com/spf13/cobra v1.8.0
github.com/twpayne/go-vfs/v5 v5.0.4
)

require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/sys v0.17.0 // indirect
github.com/stretchr/testify v1.9.0 // indirect
golang.org/x/sys v0.20.0 // indirect
)
18 changes: 16 additions & 2 deletions internal/go.sum
Original file line number Diff line number Diff line change
@@ -1,14 +1,28 @@
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/twpayne/go-vfs/v5 v5.0.4 h1:/ne3h+rW7f5YOyOFguz+3ztfUwzOLR0Vts3y0mMAitg=
github.com/twpayne/go-vfs/v5 v5.0.4/go.mod h1:zTPFJUbgsEMFNSWnWQlLq9wh4AN83edZzx3VXbxrS1w=
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
43 changes: 43 additions & 0 deletions internal/pkg/utils/fs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package utils

import (
"os"
"path/filepath"

"github.com/twpayne/go-vfs/v5"
)

func CopyDir(path string, srcFS, dstFS vfs.FS) error {
if exists, err := Exists(dstFS, path); err != nil {
return err
} else if exists {
return nil
}

// Check if parent of path exists
if err := CopyDir(filepath.Dir(path), srcFS, dstFS); err != nil {
return err
}

// Get permission of source directory
srcInfo, err := srcFS.Stat(path)
if err != nil {
return err
}
// Create directory with same permissions as source
if err := vfs.MkdirAll(dstFS, path, srcInfo.Mode()); err != nil {
return err
}
return nil
}

func Exists(fs vfs.FS, path string) (bool, error) {
_, err := fs.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
Binary file removed internal/slink/slink
Binary file not shown.
96 changes: 0 additions & 96 deletions internal/slink/slink.go

This file was deleted.

0 comments on commit 6cb9a27

Please sign in to comment.