Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to build result of "naml codify" #99

Open
larsks opened this issue Nov 21, 2021 · 7 comments · Fixed by #100
Open

Failed to build result of "naml codify" #99

larsks opened this issue Nov 21, 2021 · 7 comments · Fixed by #100

Comments

@larsks
Copy link

larsks commented Nov 21, 2021

I have an example app that consists of a Service:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: example
  name: example
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: example
  type: LoadBalancer

And a Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: example
  name: example
spec:
  replicas: 1
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - containerPorts:
        - containerPort: 8080
          name: http
          protocol: TCP
        image: alpinelinux/darkhttpd
        name: darkhttpd

If I try to follow the instructions in the README, the build fails because of missing dependencies:

$ mkdir out
$ cat deployment.yaml service.yaml | naml codify > out/main.go
$ cd out
$ naml build -o app
2021-11-21T08:15:27-05:00 [Critical  ]  unable to build NAML binary from source:

+-------------------------+---------------------------------
| Codify Compile Failure  |
+-------------------------+
|
|
| /tmp/3696928851.go:34:2: no required module provides package github.com/kris-nova/naml: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/3696928851.go:30:2: no required module provides package k8s.io/api/core/v1: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/3696928851.go:31:2: no required module provides package k8s.io/apimachinery/pkg/apis/meta/v1: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/3696928851.go:35:2: no required module provides package k8s.io/apimachinery/pkg/runtime: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/3696928851.go:32:2: no required module provides package k8s.io/apimachinery/pkg/util/intstr: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/3696928851.go:36:2: no required module provides package k8s.io/client-go/kubernetes: go.mod file not found in current directory or any parent directory; see 'go help modules'

If I try to resolve the dependency problems by running go mod init and go tidy...

$ go mod init example
go: creating new go.mod: module example
go: to add module requirements and sums:
        go mod tidy
$ go mod tidy
go: finding module for package github.com/kris-nova/naml
go: finding module for package k8s.io/api/core/v1
go: finding module for package k8s.io/apimachinery/pkg/apis/meta/v1
go: finding module for package k8s.io/apimachinery/pkg/util/intstr
go: finding module for package k8s.io/client-go/kubernetes
go: finding module for package k8s.io/apimachinery/pkg/runtime
go: found github.com/kris-nova/naml in github.com/kris-nova/naml v1.0.1
go: found k8s.io/api/core/v1 in k8s.io/api v0.22.4
go: found k8s.io/apimachinery/pkg/apis/meta/v1 in k8s.io/apimachinery v0.22.4
go: found k8s.io/apimachinery/pkg/runtime in k8s.io/apimachinery v0.22.4
go: found k8s.io/apimachinery/pkg/util/intstr in k8s.io/apimachinery v0.22.4
go: found k8s.io/client-go/kubernetes in k8s.io/client-go v0.22.4

...and then attempt to build, it fails with unused imports and an undefined reference:

$ naml build -o app
2021-11-21T08:16:51-05:00 [Critical  ]  unable to build NAML binary from source:

+-------------------------+---------------------------------
| Codify Compile Failure  |
+-------------------------+
|
|
| # command-line-arguments
/tmp/2642747543.go:30:2: imported and not used: "k8s.io/api/core/v1" as corev1
/tmp/2642747543.go:32:2: imported and not used: "k8s.io/apimachinery/pkg/util/intstr"
/tmp/2642747543.go:70:21: undefined: Service
+----------------------------------------------------------

Is the README missing some steps? Am I missing some steps?

I am using naml 1.0.1.

@krisnova
Copy link
Owner

Thanks for providing the YAML and the failure!

I will add this as a regression in the unit tests and cut a release with the fix. Stay tuned!

@krisnova krisnova mentioned this issue Nov 22, 2021
@krisnova
Copy link
Owner

The problem was that naml was expecting the naml delimiter to separate the two files
Reforming your command to include the delimiter will help

printf "\n\n---\n\n" | cat file1.yaml - file2.yaml - file3.yaml | naml codify > out/main.go

@larsks
Copy link
Author

larsks commented Nov 22, 2021

Well now I feel stupid for not even thinking about that because I deal with multi-document YAML files all the time and never even considered that. But even ignoring that particular issue, I still see the build failures:

$ mkdir out
$ naml codify < deployment.yaml > out/main.go
$ cd out
$ naml build -o app
2021-11-22T11:19:27-05:00 [Critical  ]  unable to build NAML binary from source:

+-------------------------+---------------------------------
| Codify Compile Failure  |
+-------------------------+
|
|
| /tmp/1481936367.go:30:2: no required module provides package github.com/hexops/valast: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/1481936367.go:35:2: no required module provides package github.com/kris-nova/naml: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/1481936367.go:31:2: no required module provides package k8s.io/api/apps/v1: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/1481936367.go:32:2: no required module provides package k8s.io/api/core/v1: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/1481936367.go:33:2: no required module provides package k8s.io/apimachinery/pkg/apis/meta/v1: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/1481936367.go:36:2: no required module provides package k8s.io/apimachinery/pkg/runtime: go.mod file not found in current directory or any parent directory; see 'go help modules'
/tmp/1481936367.go:37:2: no required module provides package k8s.io/client-go/kubernetes: go.mod file not found in current directory or any parent directory; see 'go help modules'
+----------------------------------------------------------

@krisnova
Copy link
Owner

Oh I didn't see that you were using naml build which is basically just a wrapper of the Go compiler.

For what it's worth I always work using the /out directory in the naml repository.

The provided go.mod that ships with naml should include all the dependencies you need to build your binary.

git clone [email protected]:kris-nova/naml.git
cd naml
git checkout tags/v1.0.1 -b v1.0.1
cat deploy.yaml | naml codify > out/main.go
cd out
naml build -o app
./app

@krisnova
Copy link
Owner

I think your error still deserves a test and a workflow, i will repeat the same process that I did with #100 and follow up

@krisnova krisnova reopened this Nov 22, 2021
@larsks
Copy link
Author

larsks commented Nov 22, 2021

For what it's worth I always work using the /out directory in the naml repository.

Ah, I see. The README wasn't clear that the out directory was created inside the checked out naml repository. I assumed from the instructions that I could just install the naml binary and run with it.

If I create the output directory inside the naml repository, things work as documented.

@krisnova
Copy link
Owner

I assumed from the instructions that I could just install the naml binary and run with it.

I want to be clear. We do want to support that functionality with naml.

I think we are learning that naml is probably going to have to have a command such as naml init or naml env that will initialize a directory for compiling.

Keeping this issue open as a reminder for myself to address this in a later release.

Happy to know your code is working now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants