backstage / backstage

Backstage is an open framework for building developer portals
https://backstage.io/
Apache License 2.0
26.73k stars 5.52k forks source link

🐛 Bug Report: NunjucksWorkflowRunner complains of invalid strings #23305

Closed drodil closed 2 weeks ago

drodil commented 3 months ago

📜 Description

Passing nunjucks tags as part of a template generates an error in NunjucksWorflowRunner

👍 Expected behavior

No error should be generated, warning at max

👎 Actual Behavior with Screenshots

Failed to parse template string: {% if parameters.name %} ${{parameters.name}} {% else %} default {% endif %} with error Unexpected token a in JSON at position 0

👟 Reproduction steps

Create a template where action input uses nunjucks tag:

- id: fetch-base
  name: Fetch Base
  action: fetch:template
  input:
    url: ./template
    values:
      name: {% if parameters.name %} ${{parameters.name}} {% else %} default {% endif %}
      owner: ${{ parameters.owner }}

📃 Provide the context for the Bug.

It should be possible to use nunjucks tags in template action inputs. This now generates an error but still it works so probably removing the unnecessary logging or changing it to a warning as the template still works even if it generates this error.

https://github.com/backstage/backstage/blob/75b7d4e49bc072e7cfdb6115e1038a94b35cd8bb/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts#L199

🖥️ Your Environment

OS: Darwin 23.3.0 - darwin/arm64 node: v18.15.0 yarn: 1.22.19 cli: 0.25.2 (installed) backstage: 1.23.3

Dependencies: @backstage/app-defaults 1.5.0 @backstage/backend-app-api 0.5.13 @backstage/backend-common 0.17.0, 0.19.9, 0.20.1, 0.21.2 @backstage/backend-dev-utils 0.1.4 @backstage/backend-openapi-utils 0.1.5 @backstage/backend-plugin-api 0.6.12 @backstage/backend-tasks 0.5.17 @backstage/backend-test-utils 0.3.2 @backstage/catalog-client 1.6.0 @backstage/catalog-model 1.4.4 @backstage/cli-common 0.1.13 @backstage/cli-node 0.2.3 @backstage/cli 0.25.2 @backstage/config-loader 1.6.2 @backstage/config 1.1.1 @backstage/core-app-api 1.12.0 @backstage/core-compat-api 0.2.0 @backstage/core-components 0.12.5, 0.13.10, 0.14.0 @backstage/core-plugin-api 1.9.0 @backstage/dev-utils 1.0.27 @backstage/errors 1.2.3 @backstage/eslint-plugin 0.1.5 @backstage/frontend-plugin-api 0.6.0 @backstage/integration-aws-node 0.1.9 @backstage/integration-react 1.1.24 @backstage/integration 1.9.0 @backstage/plugin-api-docs 0.11.0 @backstage/plugin-app-backend 0.3.60 @backstage/plugin-app-node 0.1.12 @backstage/plugin-auth-backend-module-atlassian-provider 0.1.4 @backstage/plugin-auth-backend-module-aws-alb-provider 0.1.3 @backstage/plugin-auth-backend-module-gcp-iap-provider 0.2.7 @backstage/plugin-auth-backend-module-github-provider 0.1.9 @backstage/plugin-auth-backend-module-gitlab-provider 0.1.9 @backstage/plugin-auth-backend-module-google-provider 0.1.9 @backstage/plugin-auth-backend-module-microsoft-provider 0.1.7 @backstage/plugin-auth-backend-module-oauth2-provider 0.1.9 @backstage/plugin-auth-backend-module-oauth2-proxy-provider 0.1.5 @backstage/plugin-auth-backend-module-oidc-provider 0.1.2 @backstage/plugin-auth-backend-module-okta-provider 0.0.5 @backstage/plugin-auth-backend 0.21.2 @backstage/plugin-auth-node 0.4.7 @backstage/plugin-catalog-backend-module-aws 0.3.6 @backstage/plugin-catalog-backend-module-msgraph 0.5.19 @backstage/plugin-catalog-backend-module-scaffolder-entity-model 0.1.9 @backstage/plugin-catalog-backend-module-unprocessed 0.3.9 @backstage/plugin-catalog-backend 1.17.2 @backstage/plugin-catalog-common 1.0.21 @backstage/plugin-catalog-graph 0.4.0 @backstage/plugin-catalog-node 1.7.2 @backstage/plugin-catalog-react 1.10.0 @backstage/plugin-catalog-unprocessed-entities 0.1.8 @backstage/plugin-catalog 1.17.0 @backstage/plugin-devtools-backend 0.2.9 @backstage/plugin-devtools-common 0.1.8 @backstage/plugin-devtools 0.1.9 @backstage/plugin-events-backend 0.2.21 @backstage/plugin-events-node 0.2.21 @backstage/plugin-github-actions 0.6.11 @backstage/plugin-home-react 0.1.8 @backstage/plugin-home 0.6.2 @backstage/plugin-jenkins-backend 0.3.6 @backstage/plugin-jenkins-common 0.1.24 @backstage/plugin-jenkins 0.9.5 @backstage/plugin-kubernetes-common 0.7.4 @backstage/plugin-org 0.6.20 @backstage/plugin-permission-backend 0.5.35 @backstage/plugin-permission-common 0.7.12 @backstage/plugin-permission-node 0.7.23 @backstage/plugin-permission-react 0.4.20 @backstage/plugin-proxy-backend 0.4.10 @backstage/plugin-scaffolder-backend-module-azure 0.1.4 @backstage/plugin-scaffolder-backend-module-bitbucket-cloud 0.1.2 @backstage/plugin-scaffolder-backend-module-bitbucket-server 0.1.2 @backstage/plugin-scaffolder-backend-module-bitbucket 0.2.2 @backstage/plugin-scaffolder-backend-module-confluence-to-markdown 0.2.13 @backstage/plugin-scaffolder-backend-module-cookiecutter 0.2.36 @backstage/plugin-scaffolder-backend-module-gerrit 0.1.4 @backstage/plugin-scaffolder-backend-module-gitea 0.1.2 @backstage/plugin-scaffolder-backend-module-github 0.2.2 @backstage/plugin-scaffolder-backend-module-gitlab 0.2.15 @backstage/plugin-scaffolder-backend 1.21.2 @backstage/plugin-scaffolder-common 1.5.0 @backstage/plugin-scaffolder-node 0.2.10, 0.3.2 @backstage/plugin-scaffolder-react 1.8.0 @backstage/plugin-scaffolder 1.18.0 @backstage/plugin-search-backend-module-catalog 0.1.16 @backstage/plugin-search-backend-module-elasticsearch 1.3.15 @backstage/plugin-search-backend-module-techdocs 0.1.16 @backstage/plugin-search-backend-node 1.2.16 @backstage/plugin-search-backend 1.5.2 @backstage/plugin-search-common 1.2.10 @backstage/plugin-search-react 1.7.6 @backstage/plugin-search 1.4.6 @backstage/plugin-signals-node 0.0.1, 0.0.3 @backstage/plugin-signals-react 0.0.1 @backstage/plugin-signals 0.0.1 @backstage/plugin-sonarqube-backend 0.2.14 @backstage/plugin-sonarqube-react 0.1.13 @backstage/plugin-sonarqube 0.7.12 @backstage/plugin-techdocs-backend 1.9.5 @backstage/plugin-techdocs-node 1.11.4 @backstage/plugin-techdocs-react 1.1.16 @backstage/plugin-techdocs 1.10.0 @backstage/plugin-user-settings-backend 0.2.11 @backstage/plugin-user-settings 0.8.1 @backstage/release-manifests 0.0.11 @backstage/repo-tools 0.6.2 @backstage/test-utils 1.5.0 @backstage/theme 0.2.19, 0.4.4, 0.5.1 @backstage/types 1.1.1 @backstage/version-bridge 1.0.7

👀 Have you spent some time to check if this bug has been raised before?

🏢 Have you read the Code of Conduct?

Are you willing to submit PR?

None

benjdlambert commented 2 months ago

I'm not sure of the support for the nunjucks tags in the parameters block, I wonder if theres some incompatibility there.

For this example however you can simplify the tags to this:

      name: ${{ parameters.name if parameters.name else "default" }}
github-actions[bot] commented 3 weeks ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.