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

Update grammar and add parsing support for urlQueryParam #3863

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
[6.1.1 (2025-03-17)](https://github.com/Orange-OpenSource/hurl/blob/master/CHANGELOG.md#6.1.1)
========================================================================================================================

Thanks to
[@lu-zero](https://github.com/lu-zero),
[@andrejohansson](https://github.com/andrejohansson),

Bugs Fixed:

* Fix hurlfmt spacing [#3839](https://github.com/Orange-OpenSource/hurl/issues/3839)
* Fix filename parsing [#3848](https://github.com/Orange-OpenSource/hurl/issues/3848)


[6.1.0 (2025-03-12)](https://github.com/Orange-OpenSource/hurl/blob/master/CHANGELOG.md#6.1.0)
========================================================================================================================

Expand Down
23 changes: 11 additions & 12 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

45 changes: 23 additions & 22 deletions RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@ We always have to start with current version x.y.0-snapshot (in all Cargo.toml).
Used to publish a new release from master branch (normal process).

- Run `release.yml` workflow on `master` branch
- Fill `Desired delivery version` input with the `x.y.z` version you want to publish, it will:
- Clean pending release
- Create new `release/x.y.0` branch
- Checkout this new branch
- Update all toml, crates, man and docs with `x.y.0`
- Generate CHANGELOG
- Commit all updates
- Create the `x.y.0` tag
- Create draft GitHub release `x.y.0`
- Create PR from `release/x.y.0` to `master`
- Publish the draft release
- Fill `Desired delivery version` input with the `x.y.z` version you want to publish, it will:
- Clean pending release
- Create new `release/x.y.0` branch
- Checkout this new branch
- Update all toml, crates, man and docs with `x.y.0`
- Generate CHANGELOG
- Commit all updates
- Create the `x.y.0` tag
- Create draft GitHub release `x.y.0`
- Create PR from `release/x.y.0` to `master`
- Publish the draft release
- Test release on external test project
- Change the release status from draft to public on github
- Accept the PR from `release/x.y.0` to `master` with `/accept`
Expand All @@ -43,18 +43,19 @@ Used to publish a new release from master branch (normal process).

Used when you want to deliver a fix from a published release (tag).

- Create a new branch `release/x.y.z` from desired tag `x.y.z` by increasing the patch version, for example `release/4.0.1` from tag `4.0.0`
- Create a new branch `release/x.y.z` from desired tag `x.y.z` manually by increasing the patch version, for example `release/6.1.1` from tag `6.1.0`
- Create your fix branch, work on it then merge it to the new fresh `release/x.y.z`
- Run `release.yml` workflow on existing `release/x.y.z` branch
- Fill `Desired delivery version` input your `x.y.z` version, it will:
- Clean pending release
- Checkout this new branch
- Update all toml, crates, man and docs with `x.y.z`
- Generate CHANGELOG
- Commit all updates
- Create the `x.y.z` tag
- Create draft GitHub release `x.y.z`
- Create PR from `release/x.y.z` to `master`
- Publish the draft release
- Fill `Desired delivery version` input your `x.y.z` version, it will:
- Clean pending release
- Checkout this new branch
- Update all toml, crates, man and docs with `x.y.z`
- Generate CHANGELOG
- Commit all updates
- Create the `x.y.z` tag
- Create draft GitHub release `x.y.z`
- Create PR from `release/x.y.z` to `master`
- Publish the draft release
- Change the release status from draft to public on github
- Close the PR from `release/x.y.z` to `master` and manage it manually rebasing commits to reorder history and keep it linear

Expand Down
6 changes: 4 additions & 2 deletions docs/grammar.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/manual/hurl.1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.TH hurl 1 "12 Mar 2025" "hurl 6.1.0" " Hurl Manual"
.TH hurl 1 "14 Mar 2025" "hurl 6.2.0-SNAPSHOT" " Hurl Manual"
.SH NAME

hurl - run and test HTTP requests.
Expand Down
2 changes: 1 addition & 1 deletion docs/manual/hurlfmt.1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.TH hurl 1 "12 Mar 2025" "hurl 6.1.0" " Hurl Manual"
.TH hurl 1 "14 Mar 2025" "hurl 6.2.0-SNAPSHOT" " Hurl Manual"
.SH NAME

hurlfmt - format Hurl files
Expand Down
7 changes: 5 additions & 2 deletions docs/spec/grammar/hurl.grammar
Original file line number Diff line number Diff line change
Expand Up @@ -468,7 +468,7 @@ filename: (filename-content | placeholder)*

filename-content: (filename-text | filename-escaped-char)*

filename-text: ~[#;{} \n\\]+
filename-text: ~[#;{} \n\r\\]+

filename-escaped-char: "\\" ( "\\" | "b" | "f" | "n" | "r" | "t" | "#" | ";"| " " | "{" | "}" | "u" unicode-char)

Expand All @@ -477,7 +477,7 @@ filename-password: (filename-password-content | placeholder)*

filename-password-content: (filename-password-text | filename-password-escaped-char)*

filename-password-text: ~[#;{} \n\\]+
filename-password-text: ~[#;{} \n\r\\]+

filename-password-escaped-char: "\\" ( "\\" | "b" | "f" | "n" | "r" | "t" | "#" | ";" | " " | "{" | "}" | ":" | "u" unicode-char)

Expand Down Expand Up @@ -564,6 +564,7 @@ filter:
| to-string-filter
| url-decode-filter
| url-encode-filter
| url-query-param-filter
| xpath-filter

base64-decode-filter: "base64Decode"
Expand Down Expand Up @@ -606,6 +607,8 @@ url-decode-filter: "urlDecode"

url-encode-filter: "urlEncode"

url-query-param-filter: "urlQueryParam" sp quoted-string

xpath-filter: "xpath" sp quoted-string


Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":5,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8002"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/<<<.*?>>>"}],"method":"GET","query_string":[],"url":"https://localhost:8002/hello"},"response":{"certificate":{"expire_date":"2025-03-15 10:48:00 UTC","issuer":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>myCA","serial_number":"3e:23:bb:87:21:f8:10:85:36:c2:72:c9:64:34:d6:15:d1:8c:69:15","start_date":"2022-12-11 10:48:00 UTC","subject":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>localhost"},"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/<<<.*?>>> Python/<<<.*?>>>"},{"name":"Date","value":"<<<.*?>>>"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Connection","value":"close"}],"http_version":"HTTP/1.1","status":200},"timings":{"app_connect":<<<\d+>>>,"begin_call":"<<<.*?>>>","connect":<<<\d+>>>,"end_call":"<<<.*?>>>","name_lookup":<<<\d+>>>,"pre_transfer":<<<\d+>>>,"start_transfer":<<<\d+>>>,"total":<<<\d+>>>}}],"captures":[],"curl_cmd":"curl --cacert tests_ssl/certs/ca/cert.pem --ssl-no-revoke 'https://localhost:8002/hello'","index":1,"line":3,"time":<<<\d+>>>}],"filename":"tests_ssl/cacert.hurl","success":true,"time":<<<\d+>>>}
{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":5,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8002"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/<<<.*?>>>"}],"method":"GET","query_string":[],"url":"https://localhost:8002/hello"},"response":{"certificate":{"expire_date":"2027-06-18 18:09:11 UTC","issuer":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>myCA","serial_number":"5f:ff:f3:18:24:35:7f:15:1b:4a:b6:81:92:67:69:ce:5e:6c:4d:20","start_date":"2025-03-15 18:09:11 UTC","subject":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>localhost"},"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/<<<.*?>>> Python/<<<.*?>>>"},{"name":"Date","value":"<<<.*?>>>"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Connection","value":"close"}],"http_version":"HTTP/1.1","status":200},"timings":{"app_connect":<<<\d+>>>,"begin_call":"<<<.*?>>>","connect":<<<\d+>>>,"end_call":"<<<.*?>>>","name_lookup":<<<\d+>>>,"pre_transfer":<<<\d+>>>,"start_transfer":<<<\d+>>>,"total":<<<\d+>>>}}],"captures":[],"curl_cmd":"curl --cacert tests_ssl/certs/ca/cert.pem --ssl-no-revoke 'https://localhost:8002/hello'","index":1,"line":3,"time":<<<\d+>>>}],"filename":"tests_ssl/cacert.hurl","success":true,"time":<<<\d+>>>}
2 changes: 1 addition & 1 deletion integration/hurl/tests_ssl/cacert_to_json.out.pattern
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":5,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8002"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/<<<.*?>>>"}],"method":"GET","query_string":[],"url":"https://localhost:8002/hello"},"response":{"certificate":{"expire_date":"2025-03-15 10:48:00 UTC","issuer":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>myCA","serial_number":"3e:23:bb:87:21:f8:10:85:36:c2:72:c9:64:34:d6:15:d1:8c:69:15","start_date":"2022-12-11 10:48:00 UTC","subject":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>localhost"},"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/<<<.*?>>> Python/<<<.*?>>>"},{"name":"Date","value":"<<<.*?>>>"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Connection","value":"close"}],"http_version":"HTTP/1.1","status":200},"timings":{"app_connect":<<<\d+>>>,"begin_call":"<<<.*?>>>","connect":<<<\d+>>>,"end_call":"<<<.*?>>>","name_lookup":<<<\d+>>>,"pre_transfer":<<<\d+>>>,"start_transfer":<<<\d+>>>,"total":<<<\d+>>>}}],"captures":[],"curl_cmd":"curl --cacert tests_ssl/certs/ca/cert.pem 'https://localhost:8002/hello'","index":1,"line":3,"time":<<<\d+>>>}],"filename":"tests_ssl/cacert.hurl","success":true,"time":<<<\d+>>>}
{"cookies":[],"entries":[{"asserts":[{"line":4,"success":true},{"line":4,"success":true},{"line":5,"success":true}],"calls":[{"request":{"cookies":[],"headers":[{"name":"Host","value":"localhost:8002"},{"name":"Accept","value":"*/*"},{"name":"User-Agent","value":"hurl/<<<.*?>>>"}],"method":"GET","query_string":[],"url":"https://localhost:8002/hello"},"response":{"certificate":{"expire_date":"2027-06-18 18:09:11 UTC","issuer":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>myCA","serial_number":"5f:ff:f3:18:24:35:7f:15:1b:4a:b6:81:92:67:69:ce:5e:6c:4d:20","start_date":"2025-03-15 18:09:11 UTC","subject":"C<<<.*?>>>=<<<.*?>>>US, ST<<<.*?>>>=<<<.*?>>>Denial, L<<<.*?>>>=<<<.*?>>>Springfield, O<<<.*?>>>=<<<.*?>>>Dis, CN<<<.*?>>>=<<<.*?>>>localhost"},"cookies":[],"headers":[{"name":"Server","value":"Werkzeug/<<<.*?>>> Python/<<<.*?>>>"},{"name":"Date","value":"<<<.*?>>>"},{"name":"Content-Type","value":"text/html; charset=utf-8"},{"name":"Content-Length","value":"12"},{"name":"Connection","value":"close"}],"http_version":"HTTP/1.1","status":200},"timings":{"app_connect":<<<\d+>>>,"begin_call":"<<<.*?>>>","connect":<<<\d+>>>,"end_call":"<<<.*?>>>","name_lookup":<<<\d+>>>,"pre_transfer":<<<\d+>>>,"start_transfer":<<<\d+>>>,"total":<<<\d+>>>}}],"captures":[],"curl_cmd":"curl --cacert tests_ssl/certs/ca/cert.pem 'https://localhost:8002/hello'","index":1,"line":3,"time":<<<\d+>>>}],"filename":"tests_ssl/cacert.hurl","success":true,"time":<<<\d+>>>}
34 changes: 17 additions & 17 deletions integration/hurl/tests_ssl/certs/ca/cert.pem
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
55 changes: 28 additions & 27 deletions integration/hurl/tests_ssl/certs/ca/key.pem
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEAvt8nptI03oL7ah/PqSZsC+gtJap9Xoy4UDim931l/vQWEIAu
q5S/gOdYDoSCzfxlUAVpW4J+nz3rQZMs8I8MzWKdKwDgtULRikVHTW4TWvJO2DCw
v9dU8DczM/TsdbMIZqcgpr9fT0+yZMqJdFWug4PLqBGOD88ibmkDCuKm1LZ3UU0I
zCrTPTbDpUga+an9upYS/+r4Cszbueo6cYtnc3xk12sto6GDUxcTsxWVQwZLISDC
yGUXafXIS8FZAixqDz8+3Wg4GmSW5m3hzLjh0nwToWEjekyxtDaaSUHM0Vke3PR7
s3ZddnHHFIzOj1SlWvYCD/3xPc7H8oX0gyj/8QIDAQABAoIBAQCGhCiiteRSqMbc
7Nxh3lUpMxCWSgge2VeQGcz6AKMgQg9Gw7+gZq1sAB6b5KF24Bjag2XT+yyXt4CT
71AtnPMt0ADp7K1wsU2Rf++XTytO3hPY4r++A9i1joGEbWk0Ld+O0Nv/CEH4WDdm
NyMWHMhnoTunD/ApjhY678EYK9HdeB6XTIoMtvhHz2Ll7mN4A0cJf0pzgBz/mj4N
00NCHB+liyETiIdaXBrmW6LVuzz47uQdFRvxIHmku2MxteLY04NfH9ls4/YUl7NJ
gdMJwGQV1Q8DVzBX+MSMCih6CTXQGCcTeAbvznPCUDM9yshjKBfvIZhSbIDbqIIp
NBnEAqFRAoGBAOpHsPnoJqb7P6Fc1LuxhQqG67Sma0cDlDYZ+9FZmCFnWHHPobh6
6TdurlP6WgTrQSgw64UbRfw4B6xcInjRXZU3QnKRDCBpzJmOqELag0HX18v+Lh8d
u9wx1r3y6Iv29WjGhJjpy1NUjrxsawq30Mv31qYolmluocuFdT0TLi0FAoGBANCR
OjBlEnNr4vRh3L9crm+gEUkRHR4diOguUMmEgGzMVZM6GwqDS8IWYQm4T58m5qW0
//E8W9r3Gv0YkcwmX+YmZKG0RZhOBK1C0H+G6WtgtDRvd+GQT8g9vEg4E4QferC4
CJFnyxFPuwxO+7PQECDkYtVIeAj5oXMvaZ2oZBr9AoGBAJE8aGZEmNGjqEqsdeT1
o/hms/CFyrN3cIYpjYa2+CydGKNViHgJGlMW9lNxPCUYgogb66XUxooZYghkBarI
gC9k1niXmuDtNb1sRrtLI1vKJyl7JbR8hl13OB0BXVCHhJOznbf+F+JM5T/CJom6
cmI//n17Y+NwhjTZQ1jdbx7RAoGBAMGRh4fSxkUJJCHbkZyoz9wZmvFNSNDiaGXU
VnYw22AeZG23x9EB+hWv32+992emGvo/+ipR8o5OOGYdn3LxSp+3kj3hqZWpEv4a
vJcfBxP5NEZWDdTyspkNcukz4ikFbkEFDC6nPfhbHyZVR5WizNU6IeAA2ia6R/U3
U7ZWylGhAoGBAKEe2zTwMYLyjFuXO14Y6OO5HybEu0HaibTyC/QzYSAq353mn6By
S9MaSwX3G8MvNmD+XlHFlZl6t4X/qP9o7hOfRlYYjK+4j3bOLwWnvCWYqAtpe3er
ttC37xDePwYbit4m8s6j6FSTvF5pK9IPsNWDccPillSmGfWKoYvZ80Mf
-----END RSA PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCgBIxiyh2WG191
oZHi5kDdgTrtLfZlcDM3E24GTdnU3iKl6Myy8G7KbixnC1yDfZ7zvBN2CnKXTadz
xYdsA9kE4TcfvI3WbLXrGg+3HuYKW2TuFGJ0NcwV9umAdjpxf4REoGBW85fzZDTI
kHokz3w5KGbpkP6xFyGgP0twy2NwxNK9OULVXn0+iS0MZM/Aa+B9holdBO9oksYc
gwQj8GYKs8mqfSLFjwqYcUx5kZVMAMj6/+NEb7FWxlETSvHLWPUy6c9JMDzmD9aA
iUpfQd+bOtSZYfNoG0Z8WllXdvZ9sHb/SZtitBhLr7Qd76oZUAPcJVcLPa9qc7sJ
IyIjj3H7AgMBAAECggEAIUpg9IqNFjYSqZPYGIcDtrGUk1SNHvR1Sz+JE9mteHpQ
ZgjlUVLxEb9TEIsOD7MaVyXpPJUW2wCGVnEhZ+jzBO9f+wPM1G/gdw2AeH3+qOfz
uw5Vn0yz7Vvln1q5dPRtDaP59w0Nr07JJnLcXn0mIHQV2QDX4/rmfYK9jLVbtlGA
MPe36CndXCJS+8ZySS6kDaS1DMVRxinXboVT9EL3EQUKqXYkZkOpVA/6DcG9Q/7U
+UY4RUnIOmJRHPTtIkTq/s9esEJHoIbkup+S3xlZd/XS2Ybi/iTh4sGCU0n/JaFD
54C0Isd46X1NDkiCxuGDQ5m4uTnrS4QFfheHh/gaJQKBgQDE4toVjpsTyHyT7bFk
4ATp1vdxB/5br6/3vqcKVQLBaAPGB1lePTJr7suN5ojjtalZx75xLdNlQl7KmaZe
PhInJMoVsFbug88lhTcBw9zvGfbMiggP63RELSg8lWiCRagC+Td3HUhrgOfu1MmN
D9n/SVqEqGKVtw1/r+M0A1n81wKBgQDQD+dQWh2+C+yjq4yw6IPHsjbCnHYHqej2
e+LuyQGKFi96+hEA+VqgtuXCOM0GAjnc5+KznbYmuzfQ12PkRnGLE8crIexDOaPZ
+B1MUkbb9VLPyplGk37f/moXVekeisVKiu+9270JZ6ry5Ax+Gds3nRKFWYC2exM5
Mlh8m1RLfQKBgQCxRMs0w5xPGKFKE6Y3/BeQb5OEurzC0pFuT8NYYyhC+SMEptNJ
LXJ7iZrO3bV8yLB8/II0px0Bu9tbMTKBAgQYKGCnXIk44Yad8q6PMUl4Inl6ugD+
THH3fG0Q9zkMqijW3Iqa/cuZt4ucFwyNrKsL1oDgljeFMza9M6Eu0KGyKwKBgBeh
9tA1rDMt/48HqU9e2bkREQ9B3lY4gnGc2MXupvIcWwBI7y2BJT4kCCzrbr5D+naR
EDr+qvXzRf++t2Xyams1r+XCUKfCIE5d1FYa8lmBoApiJM7TahHfQAWuiHAjqw0w
gtK55trun4g/Rvv7y96hRL1I0Uno6OISSeK9cfGxAoGBAJCyFHfBlnmL+I2aPNB7
ZZtqF4LTKVmw0irxGI6yQodKiCTockZP4ZhTM+J3b7XJHHfLCmpxY38BQ9VG7Epz
Kv4vJ1bspoqYvMd8Y6noPQhwrlVpmE+vFDHY0OSnIjREwNHillgcLwU/CxRlbzvW
KvJwXZlP7NxjQ6LH+aEmPulq
-----END PRIVATE KEY-----
Loading
Loading