diff --git a/.github/workflows/build_test_release.yml b/.github/workflows/build_test_release.yml new file mode 100644 index 0000000..550dce4 --- /dev/null +++ b/.github/workflows/build_test_release.yml @@ -0,0 +1,38 @@ +name: Build Binary & Release + +on: + push: + tags: + - 'v*' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Setup Go + uses: actions/setup-go@v3 + - uses: actions/checkout@v3 + - run: go get dagger.io/dagger@latest + - run: go run ci/build_test_release.go + - name: publish project + shell: bash + run: | + tag=$(git describe --tags --abbrev=0) + #linux build + release_name_linux="cocommit_go-$tag-linux" + + tar -czvf "${release_name_linux}.tar.gz" ./dist/cocommit_go-linux + + #windows build + release_name_win="cocommit_go-$tag-win" + tar -czvf "${release_name_win}.tar.gz" ./dist/cocommit_go-windows + + #mac build + release_name_mac="cocommit_go-$tag-mac" + tar -czvf "${release_name_mac}.tar.gz" ./dist/cocommit_go-darwin + - name: Release project + uses: softprops/action-gh-release@v1 + with: + files: "*.tar.gz" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8e0c0e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Custom +dist \ No newline at end of file diff --git a/ci/build_test.go b/ci/build_test.go deleted file mode 100644 index cb731eb..0000000 --- a/ci/build_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package main - -import ( - "context" - "fmt" - "os" - - "dagger.io/dagger" -) - -func main() { - ctx := context.Background() - - // initialize Dagger client - client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stderr)) - if err != nil { - panic(err) - } - defer client.Close() - - // use a node:16-slim container - // mount the source code directory on the host - // at /src in the container - source := client.Container(). - From("golang:1.19"). - WithDirectory("/src", client.Host().Directory(".", dagger.HostDirectoryOpts{ - Exclude: []string{"ci/"}, - })) - - // set the working directory in the container - // install application dependencies - runner := source.WithWorkdir("/src"). - WithExec([]string{"go", "mod", "tidy"}) - - // run application tests - out, err := runner.WithExec([]string{"go", "test"}). - Stderr(ctx) - if err != nil { - panic(err) - } - fmt.Println(out) -} \ No newline at end of file diff --git a/ci/build_test_release.go b/ci/build_test_release.go new file mode 100644 index 0000000..b60efe9 --- /dev/null +++ b/ci/build_test_release.go @@ -0,0 +1,68 @@ +package main + +import ( + "context" + "fmt" + "os" + + "dagger.io/dagger" +) + +func main() { + ctx := context.Background() + + // initialize Dagger client + client, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stderr)) + if err != nil { + panic(err) + } + defer client.Close() + + // use a node:16-slim container + // mount the source code directory on the host + // at /src in the container + source := client.Container(). + From("golang:1.21"). + WithDirectory("/src", client.Host().Directory(".", dagger.HostDirectoryOpts{ + Exclude: []string{"ci/"}, + })) + + geese := []string{"darwin", "linux", "windows"} + goarch := "amd64" + + // set the working directory in the container + // install application dependencies + runner := source.WithWorkdir("/src"). + WithExec([]string{"go", "mod", "tidy"}) + + runner = source.WithWorkdir("/src/src_code/go_src") + // run application tests + + test := runner.WithExec([]string{"go", "test"}) + buildDir := test.Directory("/src/dist") + + for _, goos := range geese { + path := fmt.Sprintf("/dist/") + filename := fmt.Sprintf("/dist/cocommit_go-%s", goos) + // build application + // write the build output to the host + build := test. + WithEnvVariable("GOOS", goos). + WithEnvVariable("GOARCH", goarch). + WithExec([]string{"go", "build", "-o", filename}) + + buildDir = buildDir.WithDirectory(path, build.Directory(path)) + + } + + _, err = buildDir.Export(ctx, ".") + if err != nil { + panic(err) + } + e, err := buildDir.Entries(ctx) + if err != nil { + panic(err) + } + + fmt.Printf("build dir contents:\n %s\n", e) +} diff --git a/go.mod b/go.mod index 84218ba..ffbdcf4 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,9 @@ module main go 1.21.0 +require dagger.io/dagger v0.10.0 + require ( - dagger.io/dagger v0.10.0 // indirect github.com/99designs/gqlgen v0.17.31 // indirect github.com/Khan/genqlient v0.6.0 // indirect github.com/adrg/xdg v0.4.0 // indirect diff --git a/go.sum b/go.sum index 765349a..543e026 100644 --- a/go.sum +++ b/go.sum @@ -7,9 +7,11 @@ github.com/Khan/genqlient v0.6.0/go.mod h1:rvChwWVTqXhiapdhLDV4bp9tz/Xvtewwkon4D github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= 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/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -17,11 +19,15 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +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/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq8cRU= github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME= golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= @@ -36,3 +42,5 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 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=