frappe / press

Full service cloud hosting for the Frappe stack - powers Frappe Cloud
https://frappe.cloud
GNU Affero General Public License v3.0
259 stars 187 forks source link

Deploy Candidate fails due to incorrect `frappe.get_value()` call #2085

Closed dvdl16 closed 1 month ago

dvdl16 commented 1 month ago

When deploying or redeploying a release candidate, I get the following error in my default worker

  File "/home/frappe/.pyenv/versions/3.10.5/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/home/frappe/.pyenv/versions/3.10.5/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/home/frappe/.vscode-server/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/__main__.py", line 39, in <module>
    cli.main()
  File "/home/frappe/.vscode-server/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 430, in main
    run()
  File "/home/frappe/.vscode-server/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 284, in run_file
    runpy.run_path(target, run_name="__main__")
  File "/home/frappe/.vscode-server/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 321, in run_path
    return _run_module_code(code, init_globals, run_name,
  File "/home/frappe/.vscode-server/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 135, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/home/frappe/.vscode-server/extensions/ms-python.debugpy-2024.10.0-linux-x64/bundled/libs/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 124, in _run_code
    exec(code, run_globals)
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/utils/bench_helper.py", line 114, in <module>
    main()
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/utils/bench_helper.py", line 20, in main
    click.Group(commands=commands)(prog_name="bench")
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/commands/scheduler.py", line 202, in start_worker
    start_worker(
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/utils/background_jobs.py", line 296, in start_worker
    worker.work(
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/rq/worker.py", line 432, in work
    self.execute_job(job, queue)
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/rq/worker.py", line 1272, in execute_job
    self.fork_work_horse(job, queue)
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/rq/worker.py", line 1175, in fork_work_horse
    self.main_work_horse(job, queue)
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/rq/worker.py", line 1310, in main_work_horse
    self.perform_job(job, queue)
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/rq/worker.py", line 1428, in perform_job
    rv = job.perform()
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/rq/job.py", line 1278, in perform
    self._result = self._execute()
  File "/workspace/development/frappe-bench-v15/env/lib/python3.10/site-packages/rq/job.py", line 1315, in _execute
    result = self.func(*self.args, **self.kwargs)
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/utils/background_jobs.py", line 220, in execute_job
    retval = method(**kwargs)
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/utils/background_jobs.py", line 186, in run_doc_method
    getattr(frappe.get_doc(doctype, name), doc_method)(**kwargs)
  File "/workspace/development/frappe-bench-v15/apps/press/press/press/doctype/deploy_candidate/deploy_candidate.py", line 376, in _build
    self._prepare_build(no_push)
  File "/workspace/development/frappe-bench-v15/apps/press/press/press/doctype/deploy_candidate/deploy_candidate.py", line 460, in _prepare_build
    self._prepare_build_context(no_push)
  File "/workspace/development/frappe-bench-v15/apps/press/press/press/doctype/deploy_candidate/deploy_candidate.py", line 887, in _prepare_build_context
    self._run_prebuild_validations_and_update_step(pmf)
  File "/workspace/development/frappe-bench-v15/apps/press/press/press/doctype/deploy_candidate/deploy_candidate.py", line 943, in _run_prebuild_validations_and_update_step
    PreBuildValidations(self, pmf).validate()
  File "/workspace/development/frappe-bench-v15/apps/press/press/press/doctype/deploy_candidate/validations.py", line 29, in validate
    self._validate_repos()
  File "/workspace/development/frappe-bench-v15/apps/press/press/press/doctype/deploy_candidate/validations.py", line 37, in _validate_repos
    if frappe.get_value(app.release, "invalid_release"):
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/__init__.py", line 2065, in get_value
    return db.get_value(*args, **kwargs)
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/database/database.py", line 519, in get_value
    result = self.get_values(
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/database/database.py", line 623, in get_values
    out = self._get_values_from_table(
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/database/database.py", line 896, in _get_values_from_table
    return query.run(as_dict=as_dict, debug=debug, update=update, run=run, pluck=pluck)
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/query_builder/utils.py", line 87, in execute_query
    result = frappe.db.sql(query, params, *args, **kwargs)  # nosemgrep
  File "/workspace/development/frappe-bench-v15/apps/frappe/frappe/database/database.py", line 262, in sql
    traceback.print_stack()
"Error in query:\n('SELECT `name` FROM `tab63a3397ccd` WHERE `name`=%(param1)s ORDER BY `modified` DESC LIMIT 1', {'param1': 'invalid_release'})"

This seems to be caused by https://github.com/frappe/press/blob/a4edd95f599ea7d56f39591acf311228f6b35b29/press/press/doctype/deploy_candidate/validations.py#L37

            if frappe.get_value(app.release, "invalid_release"):
                reason = frappe.get_value(app.release, "invalidation_reason")

It should be:

            if frappe.get_value("App Release", app.release, "invalid_release"): # Missing doctype parameter "App Release"
                reason = frappe.get_value("App Release", app.release, "invalidation_reason") # Missing doctype parameter "App Release"

git blame shows it was introduced by https://github.com/frappe/press/pull/1747

dvdl16 commented 1 month ago

@18alantom care to have a look?