mirror of
https://github.com/aler9/rtsp-simple-server
synced 2026-04-22 15:07:19 +08:00
docs: add architecture page (#5638)
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
# Architecture
|
||||
|
||||

|
||||
|
||||
In order to provide its features, _MediaMTX_ performs the following network interactions:
|
||||
|
||||
- It interacts with any external source defined in the configuration, as a client, pulling streams.
|
||||
- It exposes a series of servers that allow clients to publish and read streams with several protocols.
|
||||
- It exposes a playback server that allows to read streams stored on disk.
|
||||
- It exposes a series of administrative services.
|
||||
|
||||
Internally, the service revolves around these components:
|
||||
|
||||
- A path manager, is in charge of managing paths, performing authentication and linking clients to paths.
|
||||
- Paths. Each path contains a stream, which is provided by a single publisher or by a single external source, and is then broadcasted to any reader.
|
||||
- A recorder, in charge of storing streams to disks.
|
||||
|
||||
Everything is controlled through configuration parameters, defined in the configuration file or in environment variables.
|
||||
|
||||
Furthermore, the server can be configured to interact with an identity server in order to perform authentication.
|
||||
@@ -0,0 +1,189 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 26.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 663.9 856.8" style="enable-background:new 0 0 663.9 856.8;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#1C1C1C;stroke:#1A65B7;stroke-width:3;stroke-miterlimit:10;}
|
||||
.st1{fill:#1A65B7;}
|
||||
.st2{fill:#064375;}
|
||||
.st3{fill:#FFFFFF;}
|
||||
.st4{font-family:'ArialMT';}
|
||||
.st5{font-size:11.0826px;}
|
||||
.st6{font-size:10px;}
|
||||
.st7{fill:#1C94B5;}
|
||||
.st8{fill:none;stroke:#BCBCBC;stroke-miterlimit:10;}
|
||||
.st9{font-family:'Arial-BoldMT';}
|
||||
.st10{font-size:10.9186px;}
|
||||
.st11{fill:#BCBCBC;}
|
||||
</style>
|
||||
<g id="Layer_2_00000080900547900737573010000013098920555182204041_">
|
||||
<rect y="0" width="663.9" height="856.8"/>
|
||||
</g>
|
||||
<g id="Layer_3">
|
||||
<path class="st0" d="M189.3,762.1V23.3c0-5.3,4.3-9.6,9.6-9.6h392.4c5.3,0,9.6,4.3,9.6,9.6v738.8c0,5.3-4.3,9.6-9.6,9.6H198.9
|
||||
C193.6,771.7,189.3,767.4,189.3,762.1z"/>
|
||||
</g>
|
||||
<path class="st1" d="M215.3,199.7h73.8c3.3,0,6.1,2.7,6.1,6.1V258c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,202.4,211.9,199.7,215.3,199.7z"/>
|
||||
<path class="st1" d="M215.3,339.7h73.8c3.3,0,6.1,2.7,6.1,6.1V398c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,342.4,211.9,339.7,215.3,339.7z"/>
|
||||
<path class="st1" d="M215.3,269.7h73.8c3.3,0,6.1,2.7,6.1,6.1V328c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,272.4,211.9,269.7,215.3,269.7z"/>
|
||||
<path class="st1" d="M215.3,409.6h73.8c3.3,0,6.1,2.7,6.1,6.1v52.2c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,412.3,211.9,409.6,215.3,409.6z"/>
|
||||
<path class="st1" d="M215.3,479.6h73.8c3.3,0,6.1,2.7,6.1,6.1v52.2c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,482.3,211.9,479.6,215.3,479.6z"/>
|
||||
<path class="st1" d="M215.3,549.5h73.8c3.3,0,6.1,2.7,6.1,6.1v52.2c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,552.2,211.9,549.5,215.3,549.5z"/>
|
||||
<path class="st1" d="M215.3,619.5h73.8c3.3,0,6.1,2.7,6.1,6.1v52.2c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,622.2,211.9,619.5,215.3,619.5z"/>
|
||||
<path class="st1" d="M215.3,689.4h73.8c3.3,0,6.1,2.7,6.1,6.1v52.2c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,692.2,211.9,689.4,215.3,689.4z"/>
|
||||
<path class="st1" d="M215.3,129.8h73.8c3.3,0,6.1,2.7,6.1,6.1v52.2c0,3.3-2.7,6.1-6.1,6.1h-73.8c-3.3,0-6.1-2.7-6.1-6.1v-52.2
|
||||
C209.2,132.5,211.9,129.8,215.3,129.8z"/>
|
||||
<path class="st2" d="M380.9,753.7H315c-3.3,0-6.1-2.7-6.1-6.1V135.8c0-3.3,2.7-6.1,6.1-6.1h65.9c3.3,0,6.1,2.7,6.1,6.1v611.9
|
||||
C387,751,384.2,753.7,380.9,753.7z"/>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 237.5269 159.2057)" class="st3 st4 st5">RTSP</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.8862 172.4626)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 236.6245 228.1013)" class="st3 st4 st5">RTMP</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.9395 241.3581)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 229.2949 300.4719)" class="st3 st4 st5">WebRTC</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.9668 313.7277)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 241.3657 367.4904)" class="st3 st4 st5">SRT</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.8862 380.7473)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 241.6802 442.7697)" class="st3 st4 st5">HLS</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.8862 456.0275)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<text transform="matrix(1.0386 0 0 1 58.7236 49.6476)" class="st3 st4 st6">External sources </text>
|
||||
<text transform="matrix(1.0386 0 0 1 54.1538 61.6476)" class="st3 st4 st6">(cameras, servers)</text>
|
||||
<ellipse class="st7" cx="131.6" cy="443.9" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="103.5" cy="392.6" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="131.6" cy="358" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="100.4" cy="322.5" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="131.6" cy="291" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="100.4" cy="251" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="131.6" cy="219.4" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="100.4" cy="181.8" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="131.6" cy="146" rx="10.3" ry="9.9"/>
|
||||
<ellipse class="st7" cx="98.4" cy="80.6" rx="10.3" ry="9.9"/>
|
||||
<path class="st2" d="M504.3,43.4h70.6c3.3,0,6.1,2.7,6.1,6.1v698.3c0,3.3-2.7,6.1-6.1,6.1h-70.6c-3.3,0-6.1-2.7-6.1-6.1V49.5
|
||||
C498.2,46.1,500.9,43.4,504.3,43.4z"/>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 518.0283 409.8185)" class="st3 st4 st5">recorder</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 230.2417 508.8752)" class="st3 st4 st5">playback</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.9663 522.5275)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 235.6821 718.2033)" class="st3 st4 st5">control</text>
|
||||
<text transform="matrix(1.0386 0 0 1 243.6797 733.7326)" class="st3 st4 st5">API</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 234.4121 581.1994)" class="st3 st4 st5">metrics</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.9668 591.9826)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 239.7583 647.9416)" class="st3 st4 st5">pprof</text>
|
||||
<text transform="matrix(1.0386 0 0 1 236.8862 660.9016)" class="st3 st4 st5">server</text>
|
||||
</g>
|
||||
<text transform="matrix(1.0386 0 0 1 335.3965 402.0666)" class="st3 st4 st5">path</text>
|
||||
<text transform="matrix(1.0386 0 0 1 323.8682 415.3664)" class="st3 st4 st5">manager</text>
|
||||
<line class="st8" x1="146.1" y1="442.9" x2="209.2" y2="442.9"/>
|
||||
<line class="st8" x1="118.1" y1="392.6" x2="209.2" y2="392.6"/>
|
||||
<line class="st8" x1="145.4" y1="358" x2="209.2" y2="358"/>
|
||||
<line class="st8" x1="114.9" y1="320.9" x2="209.2" y2="320.9"/>
|
||||
<line class="st8" x1="145.9" y1="292" x2="209.2" y2="292"/>
|
||||
<line class="st8" x1="115.9" y1="249.1" x2="209.2" y2="249.1"/>
|
||||
<line class="st8" x1="146.9" y1="220.4" x2="209.2" y2="220.4"/>
|
||||
<line class="st8" x1="115.5" y1="179.8" x2="209.2" y2="179.8"/>
|
||||
<line class="st8" x1="146.4" y1="145.2" x2="209.2" y2="145.2"/>
|
||||
<text transform="matrix(1.0386 0 0 1 206.1455 38.6506)" class="st3 st9 st10">MediaMTX</text>
|
||||
<text transform="matrix(1.0386 0 0 1 85.7798 441.7463)" class="st3 st4 st6">HLS</text>
|
||||
<text transform="matrix(1.0386 0 0 1 78.3018 453.7463)" class="st3 st4 st6">readers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 53.9102 390.3244)" class="st3 st4 st6">SRT</text>
|
||||
<text transform="matrix(1.0386 0 0 1 40.6162 402.3244)" class="st3 st4 st6">publishers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 83.4956 357.2287)" class="st3 st4 st6">SRT</text>
|
||||
<text transform="matrix(1.0386 0 0 1 76.2251 369.2287)" class="st3 st4 st6">readers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 38.6572 320.4504)" class="st3 st4 st6">WebRTC</text>
|
||||
<text transform="matrix(1.0386 0 0 1 36.3726 332.4504)" class="st3 st4 st6">publishers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 72.8184 289.5768)" class="st3 st4 st6">WebRTC</text>
|
||||
<text transform="matrix(1.0386 0 0 1 76.5576 301.5764)" class="st3 st4 st6">readers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 42.1167 251.0334)" class="st3 st4 st6">RTMP</text>
|
||||
<text transform="matrix(1.0386 0 0 1 33.1846 263.0329)" class="st3 st4 st6">publishers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 79.1699 214.2062)" class="st3 st4 st6">RTMP</text>
|
||||
<text transform="matrix(1.0386 0 0 1 76.2617 226.2062)" class="st3 st4 st6">readers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 48.084 179.7834)" class="st3 st4 st6">RTSP</text>
|
||||
<text transform="matrix(1.0386 0 0 1 38.2173 191.7834)" class="st3 st4 st6">publishers</text>
|
||||
<text transform="matrix(1.0386 0 0 1 80.0322 145.0705)" class="st3 st4 st6">RTSP</text>
|
||||
<text transform="matrix(1.0386 0 0 1 76.293 157.0705)" class="st3 st4 st6">readers</text>
|
||||
<line class="st8" x1="114.9" y1="80.6" x2="402.8" y2="80.6"/>
|
||||
<path class="st1" d="M475.7,753.7h-65.9c-3.3,0-6.1-2.7-6.1-6.1V49.4c0-3.3,2.7-6.1,6.1-6.1h65.9c3.3,0,6.1,2.7,6.1,6.1v698.3
|
||||
C481.8,751,479.1,753.7,475.7,753.7z"/>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 424.9258 408.7775)" class="st3 st4 st5">paths</text>
|
||||
</g>
|
||||
<ellipse class="st7" cx="131.6" cy="517.1" rx="10.3" ry="9.9"/>
|
||||
<line class="st8" x1="146.3" y1="516.7" x2="209.2" y2="516.7"/>
|
||||
<text transform="matrix(1.0386 0 0 1 73.2041 511.7053)" class="st3 st4 st6">playback</text>
|
||||
<text transform="matrix(1.0386 0 0 1 80.9937 523.7053)" class="st3 st4 st6">users</text>
|
||||
<ellipse class="st7" cx="103.5" cy="583.1" rx="10.3" ry="9.9"/>
|
||||
<line class="st8" x1="118.1" y1="583.1" x2="209.2" y2="583.1"/>
|
||||
<text transform="matrix(1.0386 0 0 1 14.5703 585.1994)" class="st3 st4 st6">administrators</text>
|
||||
<polyline class="st8" points="209.2,656.8 107.5,656.8 107.5,596.5 "/>
|
||||
<polyline class="st8" points="209.2,724.7 100.4,724.7 100.4,596.5 "/>
|
||||
<ellipse class="st7" cx="636.6" cy="404.6" rx="10.3" ry="9.9"/>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 628.3184 386.2141)" class="st3 st4 st6">disk</text>
|
||||
</g>
|
||||
<line class="st8" x1="621.9" y1="404.6" x2="580.9" y2="404.6"/>
|
||||
<line class="st8" x1="296" y1="233.1" x2="309" y2="233.1"/>
|
||||
<line class="st8" x1="296" y1="163.7" x2="309" y2="163.7"/>
|
||||
<line class="st8" x1="296" y1="304.5" x2="309" y2="304.5"/>
|
||||
<line class="st8" x1="296" y1="372.8" x2="309" y2="372.8"/>
|
||||
<line class="st8" x1="296" y1="444.4" x2="309" y2="444.4"/>
|
||||
<line class="st8" x1="296" y1="512.6" x2="309" y2="512.6"/>
|
||||
<line class="st8" x1="296" y1="586.4" x2="309" y2="586.4"/>
|
||||
<line class="st8" x1="296" y1="653.6" x2="309" y2="653.6"/>
|
||||
<line class="st8" x1="296" y1="721.2" x2="309" y2="721.2"/>
|
||||
<ellipse class="st7" cx="456.8" cy="812.1" rx="10.3" ry="9.9"/>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 423.0469 835.4055)" class="st3 st4 st6">identity server </text>
|
||||
<text transform="matrix(1.0386 0 0 1 424.7988 844.8039)" class="st3 st4 st6">(HTTP / JWT)</text>
|
||||
</g>
|
||||
<line class="st8" x1="456.8" y1="774.7" x2="456.8" y2="801.6"/>
|
||||
<line class="st8" x1="388.4" y1="405.9" x2="403.8" y2="405.9"/>
|
||||
<line class="st8" x1="481.8" y1="405.9" x2="498.2" y2="405.9"/>
|
||||
<ellipse class="st7" cx="313.9" cy="811.7" rx="10.3" ry="9.9"/>
|
||||
<g>
|
||||
<text transform="matrix(1.0386 0 0 1 284.165 835.4055)" class="st3 st4 st6">configuration </text>
|
||||
<text transform="matrix(1.0386 0 0 1 267.7549 847.4055)" class="st3 st4 st6">(file or environment)</text>
|
||||
</g>
|
||||
<line class="st8" x1="313.9" y1="774.7" x2="313.9" y2="801.2"/>
|
||||
<polygon class="st11" points="122.4,84.9 122.4,76.3 114.6,80.6 "/>
|
||||
<polygon class="st11" points="201.4,175.5 201.4,184.1 209.2,179.8 "/>
|
||||
<polygon class="st11" points="201.4,140.8 201.4,149.3 209.2,145.1 "/>
|
||||
<polygon class="st11" points="201.4,216.4 201.4,224.9 209.2,220.7 "/>
|
||||
<polygon class="st11" points="201.4,244.8 201.4,253.4 209.2,249.1 "/>
|
||||
<polygon class="st11" points="201.4,287.7 201.4,296.3 209.2,292 "/>
|
||||
<polygon class="st11" points="201.4,353.7 201.4,362.3 209.2,358 "/>
|
||||
<polygon class="st11" points="201.4,316.6 201.4,325.2 209.2,320.9 "/>
|
||||
<polygon class="st11" points="201.4,388.4 201.4,397 209.2,392.7 "/>
|
||||
<polygon class="st11" points="200.9,438.5 200.9,447 208.7,442.8 "/>
|
||||
<polygon class="st11" points="202.2,512.4 202.2,520.9 210,516.7 "/>
|
||||
<polygon class="st11" points="202.2,578.8 202.2,587.4 210,583.1 "/>
|
||||
<polygon class="st11" points="200.9,652.5 200.9,661.1 208.7,656.8 "/>
|
||||
<polygon class="st11" points="202.2,720.4 202.2,729 210,724.7 "/>
|
||||
<polygon class="st11" points="615.1,399.8 615.1,408.4 622.9,404.1 "/>
|
||||
<polygon class="st11" points="309.6,781.7 318.2,781.7 313.9,773.8 "/>
|
||||
<polygon class="st11" points="461.1,795.4 452.5,795.4 456.8,803.2 "/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -1,12 +1,12 @@
|
||||
# Configuration
|
||||
|
||||
All the configuration parameters are listed and commented in the [configuration file](../5-references/1-configuration-file.md) (`mediamtx.yml`).
|
||||
_MediaMTX_ can be configured through parameters that are listed and commented in the [configuration file](../5-references/1-configuration-file.md) (`mediamtx.yml`).
|
||||
|
||||
## Change the configuration
|
||||
|
||||
There are several ways to change the configuration:
|
||||
There are several ways to change configuration parameters:
|
||||
|
||||
1. By editing the configuration file, that is
|
||||
1. Edit the configuration file, that is
|
||||
- included into the release bundle
|
||||
- available in the root folder of the Docker image (`/mediamtx.yml`); it can be overridden in this way:
|
||||
|
||||
@@ -16,7 +16,7 @@ There are several ways to change the configuration:
|
||||
|
||||
The configuration can be changed dynamically when the server is running (hot reloading) by writing to the configuration file. Changes are detected and applied without disconnecting existing clients, whenever it's possible.
|
||||
|
||||
2. By overriding configuration parameters with environment variables, in the format `MTX_PARAMNAME`, where `PARAMNAME` is the uppercase name of a parameter. For instance, the `rtspAddress` parameter can be overridden in the following way:
|
||||
2. Use environment variables, in the format `MTX_PARAMNAME`, where `PARAMNAME` is the uppercase name of a parameter. For instance, the `rtspAddress` parameter can be overridden in the following way:
|
||||
|
||||
```sh
|
||||
MTX_RTSPADDRESS="127.0.0.1:8554" ./mediamtx
|
||||
@@ -47,7 +47,7 @@ There are several ways to change the configuration:
|
||||
docker run --rm -it --network=host -e MTX_PATHS_TEST_SOURCE=rtsp://myurl bluenviron/mediamtx:1
|
||||
```
|
||||
|
||||
3. By using the [Control API](17-control-api.md).
|
||||
3. Use the [Control API](17-control-api.md).
|
||||
|
||||
## Encrypt the configuration
|
||||
|
||||
|
||||
+14
-1
@@ -4,7 +4,20 @@ RUN go install mvdan.cc/gofumpt@v0.5.0
|
||||
endef
|
||||
export DOCKERFILE_FORMAT
|
||||
|
||||
format:
|
||||
define DOCKERFILE_PRETTIER
|
||||
FROM $(NODE_IMAGE)
|
||||
RUN yarn global add prettier@3.6.2
|
||||
endef
|
||||
export DOCKERFILE_PRETTIER
|
||||
|
||||
format-go:
|
||||
echo "$$DOCKERFILE_FORMAT" | docker build -q . -f - -t temp
|
||||
docker run --rm -it -v "$(shell pwd):/s" -w /s temp \
|
||||
sh -c "gofumpt -l -w ."
|
||||
|
||||
format-docs:
|
||||
echo "$$DOCKERFILE_PRETTIER" | docker build . -f - -t temp
|
||||
docker run --rm -v "$(shell pwd)/docs:/s" -w /s temp \
|
||||
sh -c "prettier --write ."
|
||||
|
||||
format: format-go format-docs
|
||||
|
||||
+1
-7
@@ -1,9 +1,3 @@
|
||||
define DOCKERFILE_DOCS_LINT
|
||||
FROM $(NODE_IMAGE)
|
||||
RUN yarn global add prettier@3.6.2
|
||||
endef
|
||||
export DOCKERFILE_DOCS_LINT
|
||||
|
||||
define DOCKERFILE_API_DOCS_LINT
|
||||
FROM $(NODE_IMAGE)
|
||||
RUN yarn global add @redocly/cli@1.0.0-beta.123
|
||||
@@ -31,7 +25,7 @@ lint-docsorder:
|
||||
go test -v -tags enable_linters ./internal/linters/docsorder
|
||||
|
||||
lint-docs:
|
||||
echo "$$DOCKERFILE_DOCS_LINT" | docker build . -f - -t temp
|
||||
echo "$$DOCKERFILE_PRETTIER" | docker build . -f - -t temp
|
||||
docker run --rm -v "$(shell pwd)/docs:/s" -w /s temp \
|
||||
sh -c "prettier --check ."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user