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

go_path: Support go:embed #3163

Merged
merged 2 commits into from
May 27, 2022
Merged

go_path: Support go:embed #3163

merged 2 commits into from
May 27, 2022

Conversation

abhinav
Copy link
Contributor

@abhinav abhinav commented May 24, 2022

What type of PR is this?

Bug fix

What does this PR do? Why is it needed?

The go_path rule does not currently copy embedded sources.
This means that if we use go:embed in any file and use go_path to
build a GOPATH from that, the resulting code will not compile.
Example of an error from one of our internal systems:

scaffold.go:9:13: pattern template/*: no matching files found

Which issues(s) does this PR fix?

Fixes #3162

Other notes for review

To fix this, the go_path rule needs to copy the embedsrcs over from the
archive and add them to the manifest for the go_path builder to copy.

@abhinav
Copy link
Contributor Author

abhinav commented May 24, 2022

Update:
This isn't quite right. This won't handle go:embeds of subdirectories correctly.
Exploring fix.

The `go_path` rule does not currently copy embedded sources.
This means that if we use `go:embed` in any file and use `go_path` to
build a GOPATH from that, the resulting code will not compile.
Example of an error from one of our internal systems:

    scaffold.go:9:13: pattern template/*: no matching files found

To fix this, the go_path rule needs to copy the embedsrcs over from the
archive and add them to the manifest for the go_path builder to copy.
The previous implementation of this did not handle a `go:embed` for a
subdirectory that was not a Bazel package. For example,

    mypkg/
    |- BUILD.bazel
    |- foo.go   // contains "go:embed template/foo"
    |- template/
        |- foo

With this, the BUILD.bazel for mypkg will hold
`embedsrcs = ["template/foo"]`.

However, if we just append `f.basename` to the output directory path,
this will generate `mypkg/foo`, not `mypkg/template/foo`.

To fix this, this commit is tracking the directory in which the last
source file was found,
and use a path to the embedded file relative to that directory.
for f in pkg.srcs:
src_dir = f.dirname
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is src_dir the same as pkg.dir? If so, we can just use that and avoid the check if src_dir == None later

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

src_dir and pkg.dir are not the same, unfortunately.
pkg.dir is the path inside $GOPATH, so like "src/example.com/pkg/lib" and src_dir is the path where the file is being copied from, like "tests/core/go_path/pkg/lib".

@linzhp linzhp self-assigned this May 25, 2022
@linzhp linzhp merged commit 3f84d8c into bazelbuild:master May 27, 2022
@fmeum fmeum mentioned this pull request Jun 5, 2022
gcf-merge-on-green bot pushed a commit to googleapis/gapic-generator-go that referenced this pull request Jun 6, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [io_bazel_rules_go](https://togithub.com/bazelbuild/rules_go) | http_archive | minor | `v0.32.0` -> `v0.33.0` |

---

### Release Notes

<details>
<summary>bazelbuild/rules_go</summary>

### [`v0.33.0`](https://togithub.com/bazelbuild/rules_go/releases/tag/v0.33.0)

[Compare Source](https://togithub.com/bazelbuild/rules_go/compare/v0.32.0...v0.33.0)

##### Breaking changes

-   [cover](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#cover) has been removed in v0.32.0. Please [leave a comment](https://togithub.com/bazelbuild/rules_go/issues/3168) if you are affected by this.

##### Deprecations

-   The [asm](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#asm), [compile](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#compile), and [pack](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#pack) action generators provided by [go_context](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#go_context) are deprecated and planned for removal in version v0.36.0. Please leave a comment on the [tracking bug](https://togithub.com/bazelbuild/rules_go/issues/3168) if [archive](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#archive) and [link](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#link) are not suitable replacements for your use cases.

##### Bug Fixes

-   [@&#8203;sluongng](https://togithub.com/sluongng) fixed a race condition that could cause non-sandboxed builds of `go_test` targets to fail ([bazelbuild/rules_go#3145)
-   [@&#8203;abhinav](https://togithub.com/abhinav) made `//go:embed` work with `go_path` ([bazelbuild/rules_go#3163)
-   [@&#8203;xytan0056](https://togithub.com/xytan0056) made gopackagesdriver work with Go 1.18 ([bazelbuild/rules_go#3157)
-   [@&#8203;nickgooding](https://togithub.com/nickgooding) ensured that `gomock` can be used with any Gazelle naming convention ([bazelbuild/rules_go#3155)
-   `go_library` targets using CGo can now reference unresolved symbols ([bazelbuild/rules_go#3174)

Thanks to all of the contributors!

##### Compatibility

The minimum required version of Bazel remains at 4.2.1.

##### Updated dependencies

-   Updated `org_golang_x_sys`, `org_golang_x_xerrors`, `org_golang_google_genproto`, `go_googleapis` to their most recent commit as of 2022-06-05

As always, you can use higher versions of rules_go's dependencies by declaring them in WORKSPACE before calling go_rules_dependencies. Lower versions may work but are not supported.

##### `WORKSPACE` code

    load("@&#8203;bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

    http_archive(
        name = "io_bazel_rules_go",
        sha256 = "685052b498b6ddfe562ca7a97736741d87916fe536623afb7da2824c0211c369",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip",
            "https://github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip",
        ],
    )

    load("@&#8203;io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")

    go_rules_dependencies()

    go_register_toolchains(version = "1.18.3")

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/gapic-generator-go).
gcf-merge-on-green bot pushed a commit to googleapis/gapic-config-validator that referenced this pull request Jun 6, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [io_bazel_rules_go](https://togithub.com/bazelbuild/rules_go) | http_archive | minor | `v0.32.0` -> `v0.33.0` |

---

### Release Notes

<details>
<summary>bazelbuild/rules_go</summary>

### [`v0.33.0`](https://togithub.com/bazelbuild/rules_go/releases/tag/v0.33.0)

[Compare Source](https://togithub.com/bazelbuild/rules_go/compare/v0.32.0...v0.33.0)

#### Breaking changes

-   [cover](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#cover) has been removed in v0.32.0. Please [leave a comment](https://togithub.com/bazelbuild/rules_go/issues/3168) if you are affected by this.

#### Deprecations

-   The [asm](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#asm), [compile](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#compile), and [pack](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#pack) action generators provided by [go_context](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#go_context) are deprecated and planned for removal in version v0.36.0. Please leave a comment on the [tracking bug](https://togithub.com/bazelbuild/rules_go/issues/3168) if [archive](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#archive) and [link](https://togithub.com/bazelbuild/rules_go/blob/master/go/toolchains.rst#link) are not suitable replacements for your use cases.

#### Bug Fixes

-   [@&#8203;sluongng](https://togithub.com/sluongng) fixed a race condition that could cause non-sandboxed builds of `go_test` targets to fail ([bazelbuild/rules_go#3145)
-   [@&#8203;abhinav](https://togithub.com/abhinav) made `//go:embed` work with `go_path` ([bazelbuild/rules_go#3163)
-   [@&#8203;xytan0056](https://togithub.com/xytan0056) made gopackagesdriver work with Go 1.18 ([bazelbuild/rules_go#3157)
-   [@&#8203;nickgooding](https://togithub.com/nickgooding) ensured that `gomock` can be used with any Gazelle naming convention ([bazelbuild/rules_go#3155)
-   `go_library` targets using CGo can now reference unresolved symbols ([bazelbuild/rules_go#3174)

Thanks to all of the contributors!

#### Compatibility

The minimum required version of Bazel remains at 4.2.1.

#### Updated dependencies

-   Updated `org_golang_x_sys`, `org_golang_x_xerrors`, `org_golang_google_genproto`, `go_googleapis` to their most recent commit as of 2022-06-05

As always, you can use higher versions of rules_go's dependencies by declaring them in WORKSPACE before calling go_rules_dependencies. Lower versions may work but are not supported.

#### `WORKSPACE` code

    load("@&#8203;bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

    http_archive(
        name = "io_bazel_rules_go",
        sha256 = "685052b498b6ddfe562ca7a97736741d87916fe536623afb7da2824c0211c369",
        urls = [
            "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip",
            "https://github.com/bazelbuild/rules_go/releases/download/v0.33.0/rules_go-v0.33.0.zip",
        ],
    )

    load("@&#8203;io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")

    go_rules_dependencies()

    go_register_toolchains(version = "1.18.3")

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/gapic-config-validator).
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 this pull request may close these issues.

go_path: Support embedsrcs
2 participants