.drone.star: "found unknown escape character" with backslash x 1 or 2

I found an issue with .drone.star and regular expression or specific characters in command line in .drone.star.
Let me explain it using this repository to report the issue.

In the repository, .drone.yml is my goal. That is to remove ::1 … line in /etc/hosts by a regular expression. It works like this.

Following is the line in .drone.yml, and the key is “\s”.

steps:
  - name: test
    image: ruby:2.5-stretch
    commands:
...snip...
      - ruby -e "hosts = File.read('/etc/hosts').sub(/^::1\s*localhost.*$/, ''); File.write('/etc/hosts', hosts)"
...snip...

It finally worked when replacing “\s” with “\\s” (backslash x 4) in .drone.star.
But when it is “\s” in .drone.star, it has an error “found unknown escape character”.

https://cloud.drone.io/junaruga/report-drone-ci-unknown-escape-character/16/1/2

Is it expected behavior?
Thank you.

Is it expected behavior?

yes, this is the expected behavior. The starlark file needs to generate a valid yaml, which means sometimes you need to escape characters in strings.

1 Like