Как не перестраивать артефакты при каждом вызове - PullRequest
2 голосов
/ 05 июля 2019

Я хочу скачать и собрать ruby ​​в рабочей области. Я пытался реализовать это, имитируя rules_go. У меня эта часть работает. У меня проблема в том, что каждый раз при вызове ruby_download_sdk артефакты openssl и ruby ​​перестраиваются. В приведенном ниже коде артефакты загрузки кэшируются, но сборки openssl и ruby ​​всегда выполняются.

def ruby_download_sdk(name, version = None):
    # TODO detect os and arch
    os, arch = "osx", "x86_64"

    _ruby_download_sdk(
        name = name, 
        version = version,
    )
    _register_toolchains(name, os, arch)

def _ruby_download_sdk_impl(repository_ctx):
    # TODO detect platform
    platform = ("osx", "x86_64")

    _sdk_build_file(repository_ctx, platform)
    _remote_sdk(repository_ctx)

_ruby_download_sdk = repository_rule(
    _ruby_download_sdk_impl,
    attrs = {
        "version": attr.string(),
    },
)

def _remote_sdk(repository_ctx):
    _download_openssl(repository_ctx, version = "1.1.1c")
    _download_ruby(repository_ctx, version = "2.6.3")

    openssl_path, ruby_path = "openssl/build", ""
    _build(repository_ctx, "openssl", openssl_path, ruby_path)
    _build(repository_ctx, "ruby", openssl_path, ruby_path)

def _build(repository_ctx, name, openssl_path, ruby_path):
    script_name = "build-{}.sh".format(name)
    template_name = "build-{}.template".format(name)

    repository_ctx.template(
        script_name,
        Label("@rules_ruby//ruby/private:{}".format(template_name)),
        substitutions = {
            "{ssl_build}": openssl_path,
            "{ruby_build}": ruby_path,
        }
    )
    repository_ctx.report_progress("Building {}".format(name))
    res = repository_ctx.execute(["./" + script_name], timeout=20*60)

    if res.return_code != 0:
        print("res %s" % res.return_code)
        print(" -stdout: %s" % res.stdout)
        print(" -stderr: %s" % res.stderr)

Какой-нибудь совет, как я могу сделать так, чтобы bazel знал так, чтобы он не перестраивал эти артефакты сборки каждый раз?

...