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

refactor: new manifest.bzl #94

Open
wants to merge 15 commits into
base: main
Choose a base branch
from

Commits on Sep 22, 2024

  1. fix: MODULE.bazel.lock conflicts

    See bazelbuild/bazel#20369
    
    While working on refactoring, I kept hitting rebase conflicts due to
    issues with the MODULE lock. I guess it's because the Bazel version in
    e2e tests is much lower than the current one with the fix (7.2) but
    still, I don't think it adds much to have the lock in e2e testing.
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    3675db4 View commit details
    Browse the repository at this point in the history
  2. fix: repo name in copy.sh script

    PR GoogleContainerTools#73 added the `_resolve` and this breaks the buildozer fix / autofix
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    bf9b27a View commit details
    Browse the repository at this point in the history
  3. fix: remove dead locks

    It seemed like 75afff9 in GoogleContainerTools#47 added the new locks but as new files, that
    is, the old ones were left behind.
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    22ba9e5 View commit details
    Browse the repository at this point in the history
  4. feat: add support for MODULE.bazel to the lock copy.sh script

    Add support for MODULE.bazel to the lock script and avoid printing an
    unnecessary (and annoying 😅) error when building in a "modern repo".
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    eff7b9f View commit details
    Browse the repository at this point in the history
  5. feat: avoid DEBUG messages for lockless repos

    Add a `nolock` attribute to avoid getting annoying DEBUG messages for
    repos that we explicitly want to run without a lock.
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    540a7cb View commit details
    Browse the repository at this point in the history
  6. refactor: apt/tests

    * make apt/tests more readable by factoring out the parameters
    
    * add a "test suite macro" in each test file that group all of the unit
      tests in the file and prepends a "test suite prefix". IMHO this is
      better than using `unittest.suite` because we provide better naming
      than the automated `_test<NUMBER>` plus these better names are actual
      targets that can be executed one-by-one by name.
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    c789aad View commit details
    Browse the repository at this point in the history
  7. test: add a bullseye_nolock package to the tests

    Add other nolock tests to exercise the package repos (the templates,
    etc).
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    c038d26 View commit details
    Browse the repository at this point in the history
  8. refactor: improve the lock copy.sh script

    * separate the script into a template file so it's easier to shellcheck
      and syntax highlight in editors.
    
    * shellcheck the script and remove all SC2086 warnings
      ("Double quote to prevent globbing and word splitting")
    
    * improve the buildozer help messages in the copy.sh script:
      * reduce duplication of buildozer command
      * add a more clear autofix bazel run command that can be easily
        copy-pasted
    
    * change some of the variable names in the copy.sh template for longer,
      easier to understand names (repo_name >> name, lock_label >> label)
    
    * move repo_name and workspace_relative_path into variables to reduce
      line length and improve readability
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    0afb5dc View commit details
    Browse the repository at this point in the history
  9. refactor: package_index _fetch_package_index

    While working with some flaky mirrors and trying to figure out why they
    were failing I found the _fetch_package_index code a bit hard to follow
    so here's my attempt at streamlining it a bit:
    
    * Change the general flow of the for-loop so that we can directly set
      the reasons for failure in failed_attempts
    
    * Remove both integrity as an argument and as a return value since
      neither is ever used.
    
    * return the content of the Packages index instead of the path, since we
      already have the repository_context. This way we don't need rctx
      anywhere else.
    
    * Reword failure messages adding more context and debug information
    
    * Shorter lines and templated strings, trying to make the code easier to
      read and follow.
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    d0bd4eb View commit details
    Browse the repository at this point in the history
  10. refactor: package_index struct

    * remove the `state` "intermediary `struct`" in `package_resolution.bzl`
      since it wasn't used / needed.
    
    * refactor and move _set_dict from `util.bzl` to a `_package_set` method
    
    * use `dict .get()` with default values instead of the "nested `if`s"
    
    * renamed `package()` to `package_get` and make it return all package
      versions when the version is not specified so we can remove
      `_package_versions`
    
    * reordeder `(name, version, arch)` args to match the order of the index
      keys `(arch, name, version)`
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    d5b7bda View commit details
    Browse the repository at this point in the history
  11. tests: package_index_test

    Add testing for package_index mocking the external / side effects
    (downloads, decompression, etc).
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    36258ed View commit details
    Browse the repository at this point in the history
  12. refactor: centralize and improve package_resolution logging

    The package resolution debugging that e.g. checks the package
    dependencies should all be within package_resolution.bzl _resolve_all()
    and not "leak out" returning the information that's only needed for
    debugging / logging.
    
    Also:
    
    * reduce the verbosity of the optional dependencies warning by just
      printing one message per root package instead of one per package.
    
    * break up the long lines to build the error messages and remove the
      "# buildifier: disable=print".
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    1e42af0 View commit details
    Browse the repository at this point in the history
  13. refactor: version

    * move version constraint parsing from package_resolution to its own
      _parse_version_and_constraint method in version.bzl
    
    * refactor _version_relop into a compare method in version.bzl plus a
      VERSION_OPERATORS dict so that (1) we use the operator strings
      everywhere and (2) we can use the keys to validate the operators.
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    628d989 View commit details
    Browse the repository at this point in the history
  14. refactor: combine package_resolution and package_index

    Previously we had:
    ```starlark
        pkgindex = package_index.new(rctx, sources = sources, archs = manifest["archs"])
        pkgresolution = package_resolution.new(index = pkgindex)
    ```
    And none of the code of package_resolution was used anywhere but in
    resolve.bzl and after initializing the `pkgindex`.
    
    Also, it makes sense since we are building the index from the manifest
    and once we have the index we use it to resolve the packages and
    populate the lock.
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    88623f1 View commit details
    Browse the repository at this point in the history
  15. refactor: move all manifest parsing and validation to manifest.bzl

    Cleanup resolve.bzl and package_index.bzl by moving all of the manifest
    functionality to a separate manifest.bzl file where we now do all of the
    work to generate the lock: manifest parsing, validation and the package
    index and resolution. IMHO this is how it should be because the lock is
    the "frozen state" of the manifest.
    
    * _parse() parses the YAML
    
    * _from_dict validates the manifest dict and does the rest of the
      changes that we need to produce a manifest struct
    
    * add extra validation for e.g. duplicated architectures
    
    * _lock is the only method that's exposed to the outside and it
      encapsulates all of the other parts, calling _from_dict and all of the
      package index and resolution, to produce the lock file.
    
    * move get_dupes to util.bzl
    
    * refactor the "source" struct into the new manifest where we can now
      centralize a lot of the structure and logic spread across multiple
      parts of the code.
    
    * remove yq_toolchain_prefix since it's always "yq" and, looking at GH
      code search, this seems to be a copy-paste leftover from rules_js (or
      the other way around)... the code is always the same and it never
      receives a string different from "yq".
    jjmaestro committed Sep 22, 2024
    Configuration menu
    Copy the full SHA
    dd7b1a7 View commit details
    Browse the repository at this point in the history