diff --git a/.github/workflows/manual_docs_to_dev.yml b/.github/workflows/manual_docs_to_dev.yml new file mode 100644 index 0000000000..5c51bc6623 --- /dev/null +++ b/.github/workflows/manual_docs_to_dev.yml @@ -0,0 +1,46 @@ +name: Build binaries, docs and publish to dev folder +on: + workflow_dispatch: +jobs: + build-upload: + runs-on: ubuntu-latest + name: Build and upload Assets to Release + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.7" + - name: Set outputs + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install platformio requests shutils + npm install + - name: Set soft version tag from git + run: sed -i "s/version_tag/${steps.vars.outputs.sha_short}/g" main/User_config.h + - name: Run PlatformIO + run: platformio run + - name: Prepare Release Assets + run: | + sudo apt install rename + ./scripts/prepare_deploy.sh + - name: Set up Node.js + uses: actions/setup-node@v1 + with: + node-version: "14.x" + - name: Set doc version tag from git + run: sed -i "s/version_tag/${{steps.vars.outputs.sha_short}}/g" docs/.vuepress/config.js + - name: Build documentation + run: | + python ./scripts/gen_wu_dev.py + npm run docs:build + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/.vuepress/dist + destination_dir: dev + cname: docs.openmqttgateway.com \ No newline at end of file diff --git a/scripts/gen_wu_dev.py b/scripts/gen_wu_dev.py new file mode 100644 index 0000000000..b929ce6b24 --- /dev/null +++ b/scripts/gen_wu_dev.py @@ -0,0 +1,149 @@ +import os +import requests +import json +import string +import argparse +import shutil + +mf_temp32 = string.Template('''{ + "name": "OpenMQTTGateway", + "builds": [ + { + "chipFamily": "ESP32", + "improv": false, + "parts": [ + { "path": "$cp$bl", "offset": 4096 }, + { "path": "$cp$part", "offset": 32768 }, + { "path": "$cp$boot", "offset": 57344 }, + { "path": "$cp$bin", "offset": 65536 } + ] + } + ] +}''') + +mf_temp8266 = string.Template('''{ + "name": "OpenMQTTGateway", + "builds": [ + { + "chipFamily": "ESP8266", + "parts": [{ "path": "$cp$bin", "offset": 0 }] + } + ] +}''') + +wu_temp_opt = string.Template(''' + + ''') + +wu_temp_p1 = ''' + +''' + +manif_folder = "/firmware_build_dev/" +manif_path = 'docs/.vuepress/public/firmware_build_dev/' +vue_path = 'docs/.vuepress/components/' +bin_path = 'toDeploy/' +cors_proxy = '' #'https://cors.bridged.cc/' +esp32_blurl = 'https://github.com/espressif/arduino-esp32/raw/master/tools/sdk/esp32/bin/bootloader_dio_80m.bin' +esp32_boot = 'https://github.com/espressif/arduino-esp32/raw/master/tools/partitions/boot_app0.bin' + +if not os.path.exists(manif_path): + os.makedirs(manif_path) + +if not os.path.exists(vue_path): + os.makedirs(vue_path) + +wu_file = open(vue_path + 'web-uploader.vue', 'w') +wu_file.write(wu_temp_p1) + +bl_bin = requests.get(esp32_blurl) +filename = esp32_blurl.split('/')[-1] +with open(manif_path + filename,'wb') as output_file: + output_file.write(bl_bin.content) + +boot_bin = requests.get(esp32_boot) +filename = esp32_boot.split('/')[-1] +with open(manif_path + filename,'wb') as output_file: + output_file.write(boot_bin.content) + +for name in os.listdir(bin_path): + if 'firmware.bin' in name and ('esp32' in name or 'ttgo' in name or 'heltec' in name): + fw = name.split('-firmware')[0] + man_file = fw + '.manifest.json' + print('Bin name:' + name) + part_name = name.split('-firmware')[0] + '-partitions.bin' + print('Partition name:' + part_name) + mani_str = mf_temp32.substitute({'cp':cors_proxy, 'part':manif_folder + part_name.split('/')[-1], 'bin':manif_folder + name.split('/')[-1], 'bl':manif_folder + esp32_blurl.split('/')[-1], 'boot':manif_folder + esp32_boot.split('/')[-1]}) + + with open(manif_path + man_file, 'w') as nf: + nf.write(mani_str) + + wu_file.write(wu_temp_opt.substitute({'mff':manif_folder + man_file, 'mfn':fw})) + + shutil.copyfile(bin_path + name, (manif_path + name)) + shutil.copyfile(bin_path + part_name, (manif_path + part_name)) + + print('Created: ' + os.path.abspath(man_file)) + +wu_file.write(wu_temp_p2) + +for name in os.listdir(bin_path): + if 'firmware.bin' in name and ('nodemcu' in name or 'sonoff' in name or 'rf-wifi-gateway' in name or 'manual-wifi-test' in name or 'rfbridge' in name): + fw = name.split('-firmware')[0] + man_file = fw + '.manifest.json' + print('Bin name:' + name) + part_name = name.split('-firmware')[0] + '-partitions.bin' + print('Partition name:' + part_name) + mani_str = mf_temp8266.substitute({'cp':cors_proxy, 'bin':manif_folder + name.split('/')[-1]}) + + with open(manif_path + man_file, 'w') as nf: + nf.write(mani_str) + + wu_file.write(manif_folder + wu_temp_opt.substitute({'mff':manif_folder + man_file, 'mfn':fw})) + + shutil.copyfile(bin_path + name, (manif_path + name)) + + print('Created: ' + os.path.abspath(man_file)) + +wu_file.write(wu_temp_end) +wu_file.close()