[{"data":1,"prerenderedAt":1102},["ShallowReactive",2],{"\u002Fblog\u002Fsetting-up-cd-for-this-website":3},{"id":4,"title":5,"body":6,"description":69,"extension":1090,"meta":1091,"navigation":94,"path":1092,"publishedAt":1093,"seo":1094,"stem":1095,"summary":1096,"tags":1097,"__hash__":1101},"blog\u002Fblog\u002F20230814.md","Setting up CD for this website",{"type":7,"value":8,"toc":1086},"minimark",[9,14,18,21,24,39,42,45,56,60,63,468,471,489,492,498,501,748,751,762,765,769,772,775,1082],[10,11,13],"h2",{"id":12},"about-this-website","About this website",[15,16,17],"p",{},"This website was built using Nuxt paired with Nuxt Content for dynamic content (such as this post) and is currently hosted at my personal VPS on Digital Ocean.",[15,19,20],{},"These days platforms such as Vercel or Netlify are a much better and easier solution for hosting static content, they come with automatic CI\u002FCD for example, but where's the fun in that, right?",[15,22,23],{},"My current method for publishing updates and new posts are literally these steps:",[25,26,27,34],"ol",{},[28,29,30],"li",{},[31,32,33],"code",{},"pnpm generate",[28,35,36],{},[31,37,38],{},"rsync -avz .output\u002Fpublic\u002F $1@$2:\u003Cremote_path>",[15,40,41],{},"Quite rudimentary as you can see, but it works well enough. Change something, build locally and push with SSH.",[15,43,44],{},"So why add complexity for what should be easy and simple? For that I got a couple of answers:",[25,46,47,50,53],{},[28,48,49],{},"It's fun.",[28,51,52],{},"I never implemented CD for static content, so I'll learn something new.",[28,54,55],{},"I can publish new stuff directly from Github when away from my workstation.",[10,57,59],{"id":58},"building-a-continuous-delivery-workflow-for-a-static-website","Building a continuous delivery workflow for a static website",[15,61,62],{},"As mentioned above I'm familiar with building CD pipelines for back-end applications, but static content is new for me. A quick and dirty prompt to ChatGPT got me this workflow for Github Actions:",[64,65,70],"pre",{"className":66,"code":67,"language":68,"meta":69,"style":69},"language-yaml shiki shiki-themes github-light","name: Deploy to Digital Ocean Droplet\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions\u002Fcheckout@v2\n\n      - name: Install Node.js\n        uses: actions\u002Fsetup-node@v2\n        with:\n          node-version: \"18.x\"\n\n      - name: Install dependencies\n        run: npm install\n\n      - name: Build static files\n        run: npm run generate\n\n      - name: Copy files to the server\n        uses: appleboy\u002Fscp-action@v0.1.1\n        with:\n          host: ${{ secrets.REMOTE_HOST }}\n          username: ${{ secrets.REMOTE_USER }}\n          key: ${{ secrets.SSH_PRIVATE_KEY }}\n          source: \".\u002Fdist\u002F*\"\n          target: \"\u002Fpath\u002Fto\u002Fyour\u002Fdeployed\u002Ffiles\"\n\n      - name: Restart the web server (if needed)\n        uses: appleboy\u002Fssh-action@master\n        with:\n          host: ${{ secrets.REMOTE_HOST }}\n          username: ${{ secrets.REMOTE_USER }}\n          key: ${{ secrets.SSH_PRIVATE_KEY }}\n          script: |\n            sudo systemctl restart nginx\n","yaml","",[31,71,72,89,96,106,114,122,131,136,144,152,163,168,176,188,199,204,216,226,234,245,250,262,273,278,290,300,305,317,327,334,345,356,367,378,389,394,406,416,423,432,441,450,462],{"__ignoreMap":69},[73,74,77,81,85],"span",{"class":75,"line":76},"line",1,[73,78,80],{"class":79},"shJU0","name",[73,82,84],{"class":83},"sgsFI",": ",[73,86,88],{"class":87},"sYBdl","Deploy to Digital Ocean Droplet\n",[73,90,92],{"class":75,"line":91},2,[73,93,95],{"emptyLinePlaceholder":94},true,"\n",[73,97,99,103],{"class":75,"line":98},3,[73,100,102],{"class":101},"sYu0t","on",[73,104,105],{"class":83},":\n",[73,107,109,112],{"class":75,"line":108},4,[73,110,111],{"class":79},"  push",[73,113,105],{"class":83},[73,115,117,120],{"class":75,"line":116},5,[73,118,119],{"class":79},"    branches",[73,121,105],{"class":83},[73,123,125,128],{"class":75,"line":124},6,[73,126,127],{"class":83},"      - ",[73,129,130],{"class":87},"main\n",[73,132,134],{"class":75,"line":133},7,[73,135,95],{"emptyLinePlaceholder":94},[73,137,139,142],{"class":75,"line":138},8,[73,140,141],{"class":79},"jobs",[73,143,105],{"class":83},[73,145,147,150],{"class":75,"line":146},9,[73,148,149],{"class":79},"  deploy",[73,151,105],{"class":83},[73,153,155,158,160],{"class":75,"line":154},10,[73,156,157],{"class":79},"    runs-on",[73,159,84],{"class":83},[73,161,162],{"class":87},"ubuntu-latest\n",[73,164,166],{"class":75,"line":165},11,[73,167,95],{"emptyLinePlaceholder":94},[73,169,171,174],{"class":75,"line":170},12,[73,172,173],{"class":79},"    steps",[73,175,105],{"class":83},[73,177,179,181,183,185],{"class":75,"line":178},13,[73,180,127],{"class":83},[73,182,80],{"class":79},[73,184,84],{"class":83},[73,186,187],{"class":87},"Checkout code\n",[73,189,191,194,196],{"class":75,"line":190},14,[73,192,193],{"class":79},"        uses",[73,195,84],{"class":83},[73,197,198],{"class":87},"actions\u002Fcheckout@v2\n",[73,200,202],{"class":75,"line":201},15,[73,203,95],{"emptyLinePlaceholder":94},[73,205,207,209,211,213],{"class":75,"line":206},16,[73,208,127],{"class":83},[73,210,80],{"class":79},[73,212,84],{"class":83},[73,214,215],{"class":87},"Install Node.js\n",[73,217,219,221,223],{"class":75,"line":218},17,[73,220,193],{"class":79},[73,222,84],{"class":83},[73,224,225],{"class":87},"actions\u002Fsetup-node@v2\n",[73,227,229,232],{"class":75,"line":228},18,[73,230,231],{"class":79},"        with",[73,233,105],{"class":83},[73,235,237,240,242],{"class":75,"line":236},19,[73,238,239],{"class":79},"          node-version",[73,241,84],{"class":83},[73,243,244],{"class":87},"\"18.x\"\n",[73,246,248],{"class":75,"line":247},20,[73,249,95],{"emptyLinePlaceholder":94},[73,251,253,255,257,259],{"class":75,"line":252},21,[73,254,127],{"class":83},[73,256,80],{"class":79},[73,258,84],{"class":83},[73,260,261],{"class":87},"Install dependencies\n",[73,263,265,268,270],{"class":75,"line":264},22,[73,266,267],{"class":79},"        run",[73,269,84],{"class":83},[73,271,272],{"class":87},"npm install\n",[73,274,276],{"class":75,"line":275},23,[73,277,95],{"emptyLinePlaceholder":94},[73,279,281,283,285,287],{"class":75,"line":280},24,[73,282,127],{"class":83},[73,284,80],{"class":79},[73,286,84],{"class":83},[73,288,289],{"class":87},"Build static files\n",[73,291,293,295,297],{"class":75,"line":292},25,[73,294,267],{"class":79},[73,296,84],{"class":83},[73,298,299],{"class":87},"npm run generate\n",[73,301,303],{"class":75,"line":302},26,[73,304,95],{"emptyLinePlaceholder":94},[73,306,308,310,312,314],{"class":75,"line":307},27,[73,309,127],{"class":83},[73,311,80],{"class":79},[73,313,84],{"class":83},[73,315,316],{"class":87},"Copy files to the server\n",[73,318,320,322,324],{"class":75,"line":319},28,[73,321,193],{"class":79},[73,323,84],{"class":83},[73,325,326],{"class":87},"appleboy\u002Fscp-action@v0.1.1\n",[73,328,330,332],{"class":75,"line":329},29,[73,331,231],{"class":79},[73,333,105],{"class":83},[73,335,337,340,342],{"class":75,"line":336},30,[73,338,339],{"class":79},"          host",[73,341,84],{"class":83},[73,343,344],{"class":87},"${{ secrets.REMOTE_HOST }}\n",[73,346,348,351,353],{"class":75,"line":347},31,[73,349,350],{"class":79},"          username",[73,352,84],{"class":83},[73,354,355],{"class":87},"${{ secrets.REMOTE_USER }}\n",[73,357,359,362,364],{"class":75,"line":358},32,[73,360,361],{"class":79},"          key",[73,363,84],{"class":83},[73,365,366],{"class":87},"${{ secrets.SSH_PRIVATE_KEY }}\n",[73,368,370,373,375],{"class":75,"line":369},33,[73,371,372],{"class":79},"          source",[73,374,84],{"class":83},[73,376,377],{"class":87},"\".\u002Fdist\u002F*\"\n",[73,379,381,384,386],{"class":75,"line":380},34,[73,382,383],{"class":79},"          target",[73,385,84],{"class":83},[73,387,388],{"class":87},"\"\u002Fpath\u002Fto\u002Fyour\u002Fdeployed\u002Ffiles\"\n",[73,390,392],{"class":75,"line":391},35,[73,393,95],{"emptyLinePlaceholder":94},[73,395,397,399,401,403],{"class":75,"line":396},36,[73,398,127],{"class":83},[73,400,80],{"class":79},[73,402,84],{"class":83},[73,404,405],{"class":87},"Restart the web server (if needed)\n",[73,407,409,411,413],{"class":75,"line":408},37,[73,410,193],{"class":79},[73,412,84],{"class":83},[73,414,415],{"class":87},"appleboy\u002Fssh-action@master\n",[73,417,419,421],{"class":75,"line":418},38,[73,420,231],{"class":79},[73,422,105],{"class":83},[73,424,426,428,430],{"class":75,"line":425},39,[73,427,339],{"class":79},[73,429,84],{"class":83},[73,431,344],{"class":87},[73,433,435,437,439],{"class":75,"line":434},40,[73,436,350],{"class":79},[73,438,84],{"class":83},[73,440,355],{"class":87},[73,442,444,446,448],{"class":75,"line":443},41,[73,445,361],{"class":79},[73,447,84],{"class":83},[73,449,366],{"class":87},[73,451,453,456,458],{"class":75,"line":452},42,[73,454,455],{"class":79},"          script",[73,457,84],{"class":83},[73,459,461],{"class":460},"sD7c4","|\n",[73,463,465],{"class":75,"line":464},43,[73,466,467],{"class":87},"            sudo systemctl restart nginx\n",[15,469,470],{},"From the looks it looks simple enough, but I already see some points I'll have to touch, for example:",[472,473,474,477,480,483,486],"ul",{},[28,475,476],{},"The name is quite bad.",[28,478,479],{},"I'm using Node.js 22, so guess I'll bump that to avoid any problems.",[28,481,482],{},"I'm using pnpm, not sure if corepack will be enabled by default.",[28,484,485],{},"The source directory is wrong.",[28,487,488],{},"I'm using Caddy as my webserver, not exactly sure if something like the last job will be necessary.",[15,490,491],{},"I'm writing this post as I setup this pipeline, so off to do some testing...",[15,493,494],{},[495,496,497],"em",{},"...some minutes later...",[15,499,500],{},"It did not work, of course, it never does. The first workflow I tried after some adjustments that I mentioned above:",[64,502,504],{"className":66,"code":503,"language":68,"meta":69,"style":69},"name: Deploy\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions\u002Fcheckout@v2\n\n      - name: Install Node.js\n        uses: actions\u002Fsetup-node@v2\n        with:\n          node-version: \"22.x\"\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build static files\n        run: pnpm generate\n\n      - name: Copy files to the server\n        uses: appleboy\u002Fscp-action@v0.1.1\n        with:\n          host: ${{ secrets.REMOTE_HOST }}\n          username: ${{ secrets.REMOTE_USER }}\n          key: ${{ secrets.SSH_PRIVATE_KEY }}\n          source: \".\u002F.output\u002F*\"\n          target: \"\u003Cremote_path>\"\n",[31,505,506,515,519,525,531,537,543,547,553,559,567,571,577,587,595,599,609,617,623,632,636,646,655,659,669,678,682,692,700,706,714,722,730,739],{"__ignoreMap":69},[73,507,508,510,512],{"class":75,"line":76},[73,509,80],{"class":79},[73,511,84],{"class":83},[73,513,514],{"class":87},"Deploy\n",[73,516,517],{"class":75,"line":91},[73,518,95],{"emptyLinePlaceholder":94},[73,520,521,523],{"class":75,"line":98},[73,522,102],{"class":101},[73,524,105],{"class":83},[73,526,527,529],{"class":75,"line":108},[73,528,111],{"class":79},[73,530,105],{"class":83},[73,532,533,535],{"class":75,"line":116},[73,534,119],{"class":79},[73,536,105],{"class":83},[73,538,539,541],{"class":75,"line":124},[73,540,127],{"class":83},[73,542,130],{"class":87},[73,544,545],{"class":75,"line":133},[73,546,95],{"emptyLinePlaceholder":94},[73,548,549,551],{"class":75,"line":138},[73,550,141],{"class":79},[73,552,105],{"class":83},[73,554,555,557],{"class":75,"line":146},[73,556,149],{"class":79},[73,558,105],{"class":83},[73,560,561,563,565],{"class":75,"line":154},[73,562,157],{"class":79},[73,564,84],{"class":83},[73,566,162],{"class":87},[73,568,569],{"class":75,"line":165},[73,570,95],{"emptyLinePlaceholder":94},[73,572,573,575],{"class":75,"line":170},[73,574,173],{"class":79},[73,576,105],{"class":83},[73,578,579,581,583,585],{"class":75,"line":178},[73,580,127],{"class":83},[73,582,80],{"class":79},[73,584,84],{"class":83},[73,586,187],{"class":87},[73,588,589,591,593],{"class":75,"line":190},[73,590,193],{"class":79},[73,592,84],{"class":83},[73,594,198],{"class":87},[73,596,597],{"class":75,"line":201},[73,598,95],{"emptyLinePlaceholder":94},[73,600,601,603,605,607],{"class":75,"line":206},[73,602,127],{"class":83},[73,604,80],{"class":79},[73,606,84],{"class":83},[73,608,215],{"class":87},[73,610,611,613,615],{"class":75,"line":218},[73,612,193],{"class":79},[73,614,84],{"class":83},[73,616,225],{"class":87},[73,618,619,621],{"class":75,"line":228},[73,620,231],{"class":79},[73,622,105],{"class":83},[73,624,625,627,629],{"class":75,"line":236},[73,626,239],{"class":79},[73,628,84],{"class":83},[73,630,631],{"class":87},"\"22.x\"\n",[73,633,634],{"class":75,"line":247},[73,635,95],{"emptyLinePlaceholder":94},[73,637,638,640,642,644],{"class":75,"line":252},[73,639,127],{"class":83},[73,641,80],{"class":79},[73,643,84],{"class":83},[73,645,261],{"class":87},[73,647,648,650,652],{"class":75,"line":264},[73,649,267],{"class":79},[73,651,84],{"class":83},[73,653,654],{"class":87},"pnpm install\n",[73,656,657],{"class":75,"line":275},[73,658,95],{"emptyLinePlaceholder":94},[73,660,661,663,665,667],{"class":75,"line":280},[73,662,127],{"class":83},[73,664,80],{"class":79},[73,666,84],{"class":83},[73,668,289],{"class":87},[73,670,671,673,675],{"class":75,"line":292},[73,672,267],{"class":79},[73,674,84],{"class":83},[73,676,677],{"class":87},"pnpm generate\n",[73,679,680],{"class":75,"line":302},[73,681,95],{"emptyLinePlaceholder":94},[73,683,684,686,688,690],{"class":75,"line":307},[73,685,127],{"class":83},[73,687,80],{"class":79},[73,689,84],{"class":83},[73,691,316],{"class":87},[73,693,694,696,698],{"class":75,"line":319},[73,695,193],{"class":79},[73,697,84],{"class":83},[73,699,326],{"class":87},[73,701,702,704],{"class":75,"line":329},[73,703,231],{"class":79},[73,705,105],{"class":83},[73,707,708,710,712],{"class":75,"line":336},[73,709,339],{"class":79},[73,711,84],{"class":83},[73,713,344],{"class":87},[73,715,716,718,720],{"class":75,"line":347},[73,717,350],{"class":79},[73,719,84],{"class":83},[73,721,355],{"class":87},[73,723,724,726,728],{"class":75,"line":358},[73,725,361],{"class":79},[73,727,84],{"class":83},[73,729,366],{"class":87},[73,731,732,734,736],{"class":75,"line":369},[73,733,372],{"class":79},[73,735,84],{"class":83},[73,737,738],{"class":87},"\".\u002F.output\u002F*\"\n",[73,740,741,743,745],{"class":75,"line":380},[73,742,383],{"class":79},[73,744,84],{"class":83},[73,746,747],{"class":87},"\"\u003Cremote_path>\"\n",[15,749,750],{},"What went wrong:",[472,752,753,759],{},[28,754,755,756],{},"pnpm was not available: ",[31,757,758],{},"\u002Fhome\u002Frunner\u002Fwork\u002F_temp\u002Ffa719c57-ba34-4847-a12f-7f670af314be.sh: line 1: pnpm: command not found",[28,760,761],{},"SSH was eventually going to break as well because I removed it from port 22.",[15,763,764],{},"Off to do some research and try again...",[15,766,767],{},[495,768,497],{},[15,770,771],{},"It lives! Not on second try (never does), but it's working and this very post was published automagically. Way easier than I thought, took less than 40 minutes.",[15,773,774],{},"The final workflow:",[64,776,778],{"className":66,"code":777,"language":68,"meta":69,"style":69},"name: Deploy\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions\u002Fcheckout@v2\n\n      - uses: pnpm\u002Faction-setup@v4\n        name: Install pnpm\n        with:\n          run_install: false\n\n      - name: Install Node.js\n        uses: actions\u002Fsetup-node@v3\n        with:\n          node-version: \"22.x\"\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install --frozen-lockfile\n\n      - name: Build static files\n        run: pnpm generate\n\n      - name: Copy files to the server\n        uses: appleboy\u002Fscp-action@v0.1.7\n        with:\n          host: ${{ secrets.REMOTE_HOST }}\n          username: ${{ secrets.REMOTE_USER }}\n          port: ${{ secrets.REMOTE_PORT }}\n          key: ${{ secrets.SSH_PRIVATE_KEY }}\n          source: \".\u002F.output\u002F**\"\n          target: \"\u003Cremote_path>\"\n",[31,779,780,788,792,798,804,810,816,820,826,832,840,844,850,860,868,872,884,894,900,910,914,924,933,939,947,957,961,971,980,984,994,1002,1006,1016,1025,1031,1039,1047,1057,1065,1074],{"__ignoreMap":69},[73,781,782,784,786],{"class":75,"line":76},[73,783,80],{"class":79},[73,785,84],{"class":83},[73,787,514],{"class":87},[73,789,790],{"class":75,"line":91},[73,791,95],{"emptyLinePlaceholder":94},[73,793,794,796],{"class":75,"line":98},[73,795,102],{"class":101},[73,797,105],{"class":83},[73,799,800,802],{"class":75,"line":108},[73,801,111],{"class":79},[73,803,105],{"class":83},[73,805,806,808],{"class":75,"line":116},[73,807,119],{"class":79},[73,809,105],{"class":83},[73,811,812,814],{"class":75,"line":124},[73,813,127],{"class":83},[73,815,130],{"class":87},[73,817,818],{"class":75,"line":133},[73,819,95],{"emptyLinePlaceholder":94},[73,821,822,824],{"class":75,"line":138},[73,823,141],{"class":79},[73,825,105],{"class":83},[73,827,828,830],{"class":75,"line":146},[73,829,149],{"class":79},[73,831,105],{"class":83},[73,833,834,836,838],{"class":75,"line":154},[73,835,157],{"class":79},[73,837,84],{"class":83},[73,839,162],{"class":87},[73,841,842],{"class":75,"line":165},[73,843,95],{"emptyLinePlaceholder":94},[73,845,846,848],{"class":75,"line":170},[73,847,173],{"class":79},[73,849,105],{"class":83},[73,851,852,854,856,858],{"class":75,"line":178},[73,853,127],{"class":83},[73,855,80],{"class":79},[73,857,84],{"class":83},[73,859,187],{"class":87},[73,861,862,864,866],{"class":75,"line":190},[73,863,193],{"class":79},[73,865,84],{"class":83},[73,867,198],{"class":87},[73,869,870],{"class":75,"line":201},[73,871,95],{"emptyLinePlaceholder":94},[73,873,874,876,879,881],{"class":75,"line":206},[73,875,127],{"class":83},[73,877,878],{"class":79},"uses",[73,880,84],{"class":83},[73,882,883],{"class":87},"pnpm\u002Faction-setup@v4\n",[73,885,886,889,891],{"class":75,"line":218},[73,887,888],{"class":79},"        name",[73,890,84],{"class":83},[73,892,893],{"class":87},"Install pnpm\n",[73,895,896,898],{"class":75,"line":228},[73,897,231],{"class":79},[73,899,105],{"class":83},[73,901,902,905,907],{"class":75,"line":236},[73,903,904],{"class":79},"          run_install",[73,906,84],{"class":83},[73,908,909],{"class":101},"false\n",[73,911,912],{"class":75,"line":247},[73,913,95],{"emptyLinePlaceholder":94},[73,915,916,918,920,922],{"class":75,"line":252},[73,917,127],{"class":83},[73,919,80],{"class":79},[73,921,84],{"class":83},[73,923,215],{"class":87},[73,925,926,928,930],{"class":75,"line":264},[73,927,193],{"class":79},[73,929,84],{"class":83},[73,931,932],{"class":87},"actions\u002Fsetup-node@v3\n",[73,934,935,937],{"class":75,"line":275},[73,936,231],{"class":79},[73,938,105],{"class":83},[73,940,941,943,945],{"class":75,"line":280},[73,942,239],{"class":79},[73,944,84],{"class":83},[73,946,631],{"class":87},[73,948,949,952,954],{"class":75,"line":292},[73,950,951],{"class":79},"          cache",[73,953,84],{"class":83},[73,955,956],{"class":87},"pnpm\n",[73,958,959],{"class":75,"line":302},[73,960,95],{"emptyLinePlaceholder":94},[73,962,963,965,967,969],{"class":75,"line":307},[73,964,127],{"class":83},[73,966,80],{"class":79},[73,968,84],{"class":83},[73,970,261],{"class":87},[73,972,973,975,977],{"class":75,"line":319},[73,974,267],{"class":79},[73,976,84],{"class":83},[73,978,979],{"class":87},"pnpm install --frozen-lockfile\n",[73,981,982],{"class":75,"line":329},[73,983,95],{"emptyLinePlaceholder":94},[73,985,986,988,990,992],{"class":75,"line":336},[73,987,127],{"class":83},[73,989,80],{"class":79},[73,991,84],{"class":83},[73,993,289],{"class":87},[73,995,996,998,1000],{"class":75,"line":347},[73,997,267],{"class":79},[73,999,84],{"class":83},[73,1001,677],{"class":87},[73,1003,1004],{"class":75,"line":358},[73,1005,95],{"emptyLinePlaceholder":94},[73,1007,1008,1010,1012,1014],{"class":75,"line":369},[73,1009,127],{"class":83},[73,1011,80],{"class":79},[73,1013,84],{"class":83},[73,1015,316],{"class":87},[73,1017,1018,1020,1022],{"class":75,"line":380},[73,1019,193],{"class":79},[73,1021,84],{"class":83},[73,1023,1024],{"class":87},"appleboy\u002Fscp-action@v0.1.7\n",[73,1026,1027,1029],{"class":75,"line":391},[73,1028,231],{"class":79},[73,1030,105],{"class":83},[73,1032,1033,1035,1037],{"class":75,"line":396},[73,1034,339],{"class":79},[73,1036,84],{"class":83},[73,1038,344],{"class":87},[73,1040,1041,1043,1045],{"class":75,"line":408},[73,1042,350],{"class":79},[73,1044,84],{"class":83},[73,1046,355],{"class":87},[73,1048,1049,1052,1054],{"class":75,"line":418},[73,1050,1051],{"class":79},"          port",[73,1053,84],{"class":83},[73,1055,1056],{"class":87},"${{ secrets.REMOTE_PORT }}\n",[73,1058,1059,1061,1063],{"class":75,"line":425},[73,1060,361],{"class":79},[73,1062,84],{"class":83},[73,1064,366],{"class":87},[73,1066,1067,1069,1071],{"class":75,"line":434},[73,1068,372],{"class":79},[73,1070,84],{"class":83},[73,1072,1073],{"class":87},"\".\u002F.output\u002F**\"\n",[73,1075,1076,1078,1080],{"class":75,"line":443},[73,1077,383],{"class":79},[73,1079,84],{"class":83},[73,1081,747],{"class":87},[1083,1084,1085],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":69,"searchDepth":91,"depth":91,"links":1087},[1088,1089],{"id":12,"depth":91,"text":13},{"id":58,"depth":91,"text":59},"md",{},"\u002Fblog\u002Fsetting-up-cd-for-this-website","2023-08-14",{"title":5,"description":69},"blog\u002F20230814","No more stone-age bash scripts",[1098,1099,1100],"ci\u002Fcd","deploy","ssg","o8tj8h4L8vbuGkbVf6s4ci0SyP3b5y0sXlc9OHFep6Q",1775405925930]