Related to my question from earlier, I created a `...
# general
r
Related to my question from earlier, I created a
TargetGenerator
to generate some Dockerfiles which utilize the
instructions
field as opposed to
source
. However, when I try and publish these images I am getting the following error.
Copy code
Engine traceback:
115
  in select
116
    ..
117
  in pants.vcs.changed.find_changed_owners
118
    ..
119

120
Traceback (most recent call last):
121
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 623, in native_engine_generator_send
122
    res = rule.send(arg) if err is None else rule.throw(throw or err)
123
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/vcs/changed.py", line 75, in find_changed_owners
124
    dependents = await Get(
125
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 118, in __await__
126
    result = yield self
127
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 623, in native_engine_generator_send
128
    res = rule.send(arg) if err is None else rule.throw(throw or err)
129
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/backend/project_info/dependents.py", line 27, in map_addresses_to_dependents
130
    dependencies_per_target = await MultiGet(
131
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 358, in MultiGet
132
    return await _MultiGet(tuple(__arg0))
133
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 165, in __await__
134
    result = yield self.gets
135
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 623, in native_engine_generator_send
116
    res = rule.send(arg) if err is None else rule.throw(throw or err)
117
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/graph.py", line 1193, in resolve_dependencies
118
    inferred = await MultiGet(
119
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 358, in MultiGet
120
    return await _MultiGet(tuple(__arg0))
121
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 165, in __await__
122
    result = yield self.gets
123
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 623, in native_engine_generator_send
124
    res = rule.send(arg) if err is None else rule.throw(throw or err)
125
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/backend/docker/util_rules/dependencies.py", line 39, in infer_docker_dependencies
126
    dockerfile_info = await Get(DockerfileInfo, DockerfileInfoRequest(request.field_set.address))
127
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 118, in __await__
128
    result = yield self
129
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/engine/internals/selectors.py", line 623, in native_engine_generator_send
130
    res = rule.send(arg) if err is None else rule.throw(throw or err)
131
  File "/home/runner/.cache/nce/260e9f180e257368873660af8dd93ef1ae670cb61bde99eea1fd914ad6e534bb/bindings/venvs/2.16.0/lib/python3.9/site-packages/pants/backend/docker/subsystems/dockerfile_parser.py", line 161, in parse_dockerfile
132
    assert len(dockerfiles) == 1, (
133
AssertionError: Internal error: Expected a single source file to Dockerfile parse request DockerfileInfoRequest(address=Address(myproject:my_image)), got: ().
To me, this looks like it's trying to do dependency inference on the image but only looks for the
source
field and not at
instructions
but maybe somebody has dealt with this before?
c
did you also set
source=None
in your plugin when you provide
instructions=…
?
r
Just tried it, got the same error 😢
🤔 1
c
I have written a plugin that generates
docker_image
targets that uses the
instructions
field and use it to publish images with, so I know this works.. but I don't have access to that plugin for the time being.. 🤔
@powerful-umbrella-75231 could you share the docker mirror target generator method perhaps? ... (not sure he's going to see this..)
(or at least it worked back on pants 2.10...)
r
So the catch here is that this particular image is a dependency of another image, which actually has a source field. But I think I have figured out the root cause. The parse_dockerfile rule makes a request for
HydratedSources
as opposed to a request for
GeneratedSources
provided here.
c
well, that should be fine as
enable_codegen=True
there, and the
GeneratedSources
is invoked by the rule resolving the
HydratedSources
https://github.com/pantsbuild/pants/blob/9bd3a3019567800692b109563ccd3d65bc921772/src/python/pants/engine/internals/graph.py#L1057-L1061
r
hmm, in that case let me turn on debug logging and see if it gives any more info
👍 1
Unfortunately debug logs aren't turning up any more details 😢
One interesting discovery though is this seems to only occur when using the
--changed-since
flag
Is it plausible that it's trying to hydate sources for my target generator as opposed to my generated target? I noticed the
Address
in the request refers to my target generator.
Is there a way to just pull arbitrary file content into a
BUILD
file?
c
No, the closest you have I think is using
env()
and macros, of course. But they’re not arbitrary really..
r
I found a workaround with just creating a really simple
build_file_alias
that will load my content using
pkgutil
👍 1