diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 74eee154..f8c60be8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,6 +27,7 @@ jobs: run: | sed -i 's/NO_AMS2MQTT_PRICE_KEY/AMS2MQTT_PRICE_KEY="${{secrets.AMS2MQTT_PRICE_KEY}}"/g' platformio.ini sed -i 's/NO_AMS2MQTT_PRICE_AUTHENTICATION/AMS2MQTT_PRICE_AUTHENTICATION="${{secrets.AMS2MQTT_PRICE_AUTHENTICATION}}"/g' platformio.ini + sed -i 's/NO_AMS2MQTT_SC_KEY/AMS2MQTT_SC_KEY=\\"${{secrets.AMS2MQTT_SC_KEY}}\\"/g' platformio.ini sed -i 's/NO_ENERGY_SPEEDOMETER_USER/ENERGY_SPEEDOMETER_USER=\\"${{secrets.ENERGY_SPEEDOMETER_USER}}\\"/g' platformio.ini sed -i 's/NO_ENERGY_SPEEDOMETER_PASS/ENERGY_SPEEDOMETER_PASS=\\"${{secrets.ENERGY_SPEEDOMETER_PASS}}\\"/g' platformio.ini - name: Cache Python dependencies diff --git a/.github/workflows/localazy.yml b/.github/workflows/localazy.yml index d3d0bed9..eb7763fb 100644 --- a/.github/workflows/localazy.yml +++ b/.github/workflows/localazy.yml @@ -38,4 +38,4 @@ jobs: run: localazy download -k localazy-keys.json - name: Upload translations to S3 - run: aws s3 sync ./localazy/language/ s3://amscloud-private/language/ + run: aws s3 sync ./localazy/language/ s3://${{ secrets.AWS_S3_BUCKET }}/language/ diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml new file mode 100644 index 00000000..570a99b6 --- /dev/null +++ b/.github/workflows/prerelease.yml @@ -0,0 +1,84 @@ +name: Release candidate build and upload + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+' + +jobs: + prepare: + runs-on: ubuntu-latest + steps: + - name: Check out code from repo + uses: actions/checkout@v4 + - name: Get release version for filenames + id: release_tag + env: + GITHUB_REF: ${{ github.ref }} + run: echo ::set-output name=tag::$(echo ${GITHUB_REF:11}) + + - name: Create release with release notes + id: create_release + uses: ncipollo/release-action@v1 + with: + name: Release candidate v${{ steps.release_tag.outputs.tag }} + prerelease: true + + outputs: + version: ${{ steps.release_tag.outputs.tag }} + upload_url: ${{ steps.create_release.outputs.upload_url }} + + esp32s2: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32s2 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + subfolder: /rc + esp32s3: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32s3 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + subfolder: /rc + esp32c3: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32c3 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + subfolder: /rc + esp32: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + subfolder: /rc + esp32solo: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32solo + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + subfolder: /rc + esp8266: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp8266 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + subfolder: /rc diff --git a/.github/workflows/release-deploy-env.yml b/.github/workflows/release-deploy-env.yml new file mode 100644 index 00000000..95839b97 --- /dev/null +++ b/.github/workflows/release-deploy-env.yml @@ -0,0 +1,128 @@ +name: Build with env and deploy + +on: + workflow_call: + inputs: + env: + description: 'The environment to build for' + required: true + type: string + upload_url: + description: 'The upload URL for the release assets' + required: true + type: string + version: + description: 'The version tag for the release assets' + required: true + type: string + subfolder: + description: 'The subfolder in S3 to upload the binary to' + required: false + type: string + default: '' + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Check out code from repo + uses: actions/checkout@v4 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v2 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: eu-north-1 + + - name: Cache Python dependencies + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('platformio.ini') }} + + - name: Cache PlatformIO dependencies + uses: actions/cache@v4 + with: + path: ~/.pio/libdeps + key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini') }} + + - name: Set up Python 3.9 + uses: actions/setup-python@v5 + with: + python-version: 3.9 + + - name: Inject secrets into ini file + run: | + sed -i 's/NO_AMS2MQTT_PRICE_KEY/AMS2MQTT_PRICE_KEY="${{secrets.AMS2MQTT_PRICE_KEY}}"/g' platformio.ini + sed -i 's/NO_AMS2MQTT_PRICE_AUTHENTICATION/AMS2MQTT_PRICE_AUTHENTICATION="${{secrets.AMS2MQTT_PRICE_AUTHENTICATION}}"/g' platformio.ini + sed -i 's/NO_AMS2MQTT_SC_KEY/AMS2MQTT_SC_KEY=\\"${{secrets.AMS2MQTT_SC_KEY}}\\"/g' platformio.ini + sed -i 's/NO_ENERGY_SPEEDOMETER_USER/ENERGY_SPEEDOMETER_USER=\\"${{secrets.ENERGY_SPEEDOMETER_USER}}\\"/g' platformio.ini + sed -i 's/NO_ENERGY_SPEEDOMETER_PASS/ENERGY_SPEEDOMETER_PASS=\\"${{secrets.ENERGY_SPEEDOMETER_PASS}}\\"/g' platformio.ini + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -U platformio css_html_js_minify + + - name: Set up node + uses: actions/setup-node@v4 + with: + node-version: '19.x' + - name: Build with node + run: | + cd lib/SvelteUi/app + npm ci + npm run build + cd - + env: + CI: false + + - name: PlatformIO lib install + env: + GITHUB_TAG: v${{ inputs.version }} + run: pio lib install + + - name: Build firmware + run: pio run -e ${{ inputs.env }} + + - name: Create zip file + run: /bin/sh scripts/${{ inputs.env }}/mkzip.sh + + - name: Upload binary to release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: .pio/build/${{ inputs.env }}/firmware.bin + asset_name: ams2mqtt-${{ inputs.env }}-${{ inputs.version }}.bin + asset_content_type: application/octet-stream + + - name: Upload zip to release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} + asset_path: ${{ inputs.env }}.zip + asset_name: ams2mqtt-${{ inputs.env }}-${{ inputs.version }}.zip + asset_content_type: application/zip + + - name: Create MD5 checksum file + run: md5sum .pio/build/${{ inputs.env }}/firmware.bin | cut -z -d ' ' -f 1 > firmware.md5 + + - name: Upload binary to S3 + run: aws s3 cp .pio/build/${{ inputs.env }}/firmware.bin s3://${{ secrets.AWS_S3_BUCKET }}/firmware${{ inputs.subfolder }}/ams2mqtt-${{ inputs.env }}-${{ inputs.version }}.bin + + - name: Upload MD5 checksum to S3 + run: aws s3 cp firmware.md5 s3://${{ secrets.AWS_S3_BUCKET }}/firmware${{ inputs.subfolder }}/ams2mqtt-${{ inputs.env }}-${{ inputs.version }}.md5 + + - name: Upload bootloader to S3 + run: aws s3 cp .pio/build/${{ inputs.env }}/bootloader.bin s3://${{ secrets.AWS_S3_BUCKET }}/firmware${{ inputs.subfolder }}/ams2mqtt-${{ inputs.env }}-${{ inputs.version }}-bootloader.bin + + - name: Upload partition table to S3 + run: aws s3 cp .pio/build/${{ inputs.env }}/partitions.bin s3://${{ secrets.AWS_S3_BUCKET }}/firmware${{ inputs.subfolder }}/ams2mqtt-${{ inputs.env }}-${{ inputs.version }}-partitions.bin + + - name: Upload app0 to S3 + run: aws s3 cp ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin s3://${{ secrets.AWS_S3_BUCKET }}/firmware${{ inputs.subfolder }}/ams2mqtt-${{ inputs.env }}-${{ inputs.version }}-app0.bin diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e8010ffc..17e83d81 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,213 +1,78 @@ -name: Release +name: Release build and upload on: push: tags: - - 'v*.*.*' - + - 'v[0-9]+.[0-9]+.[0-9]+' jobs: - build: - + prepare: runs-on: ubuntu-latest - steps: - - name: Check out code from repo - uses: actions/checkout@v4 - - name: Get release version for filenames - id: release_tag - env: - GITHUB_REF: ${{ github.ref }} - run: echo ::set-output name=tag::$(echo ${GITHUB_REF:11}) - - name: Get release version for code - env: - GITHUB_REF: ${{ github.ref }} - run: echo "GITHUB_TAG=$(echo ${GITHUB_REF##*/})" >> $GITHUB_ENV + - name: Check out code from repo + uses: actions/checkout@v4 + - name: Get release version for filenames + id: release_tag + env: + GITHUB_REF: ${{ github.ref }} + run: echo ::set-output name=tag::$(echo ${GITHUB_REF:11}) - - name: Inject secrets into ini file - run: | - sed -i 's/NO_AMS2MQTT_PRICE_KEY/AMS2MQTT_PRICE_KEY="${{secrets.AMS2MQTT_PRICE_KEY}}"/g' platformio.ini - sed -i 's/NO_AMS2MQTT_PRICE_AUTHENTICATION/AMS2MQTT_PRICE_AUTHENTICATION="${{secrets.AMS2MQTT_PRICE_AUTHENTICATION}}"/g' platformio.ini - sed -i 's/NO_AMS2MQTT_SC_KEY/AMS2MQTT_SC_KEY=\\"${{secrets.AMS2MQTT_SC_KEY}}\\"/g' platformio.ini - sed -i 's/NO_ENERGY_SPEEDOMETER_USER/ENERGY_SPEEDOMETER_USER=\\"${{secrets.ENERGY_SPEEDOMETER_USER}}\\"/g' platformio.ini - sed -i 's/NO_ENERGY_SPEEDOMETER_PASS/ENERGY_SPEEDOMETER_PASS=\\"${{secrets.ENERGY_SPEEDOMETER_PASS}}\\"/g' platformio.ini + - name: Create release with release notes + id: create_release + uses: ncipollo/release-action@v1 + with: + name: Release v${{ steps.release_tag.outputs.tag }} + generateReleaseNotes: true - - name: Cache Python dependencies - uses: actions/cache@v4 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('platformio.ini') }} - - name: Cache PlatformIO dependencies - uses: actions/cache@v4 - with: - path: ~/.pio/libdeps - key: ${{ runner.os }}-pio-${{ hashFiles('platformio.ini') }} - - name: Set up Python 3.9 - uses: actions/setup-python@v5 - with: - python-version: 3.9 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -U platformio css_html_js_minify + outputs: + version: ${{ steps.release_tag.outputs.tag }} + upload_url: ${{ steps.create_release.outputs.upload_url }} - - name: Set up node - uses: actions/setup-node@v4 - with: - node-version: '19.x' - - name: Build with node - run: | - cd lib/SvelteUi/app - npm ci - npm run build - cd - - env: - CI: false - - - name: PlatformIO lib install - run: pio lib install - - - name: Create release with release notes - id: create_release - uses: ncipollo/release-action@v1 - with: - name: Release v${{ steps.release_tag.outputs.tag }} - generateReleaseNotes: true - - - name: Build esp8266 firmware - run: pio run -e esp8266 - - name: Create esp8266 zip file - run: /bin/sh scripts/esp8266/mkzip.sh - - name: Upload esp8266 binary to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: .pio/build/esp8266/firmware.bin - asset_name: ams2mqtt-esp8266-${{ steps.release_tag.outputs.tag }}.bin - asset_content_type: application/octet-stream - - name: Upload esp8266 zip to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: esp8266.zip - asset_name: ams2mqtt-esp8266-${{ steps.release_tag.outputs.tag }}.zip - asset_content_type: application/zip - - - name: Build esp32 firmware - run: pio run -e esp32 - - name: Create esp32 zip file - run: /bin/sh scripts/esp32/mkzip.sh - - name: Upload esp32 binary to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: .pio/build/esp32/firmware.bin - asset_name: ams2mqtt-esp32-${{ steps.release_tag.outputs.tag }}.bin - asset_content_type: application/octet-stream - - name: Upload esp32 zip to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: esp32.zip - asset_name: ams2mqtt-esp32-${{ steps.release_tag.outputs.tag }}.zip - asset_content_type: application/zip - - - name: Build esp32s2 firmware - run: pio run -e esp32s2 - - name: Create esp32s2 zip file - run: /bin/sh scripts/esp32s2/mkzip.sh - - name: Upload esp32s2 binary to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: .pio/build/esp32s2/firmware.bin - asset_name: ams2mqtt-esp32s2-${{ steps.release_tag.outputs.tag }}.bin - asset_content_type: application/octet-stream - - name: Upload esp32s2 zip to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: esp32s2.zip - asset_name: ams2mqtt-esp32s2-${{ steps.release_tag.outputs.tag }}.zip - asset_content_type: application/zip - - - name: Build esp32s3 firmware - run: pio run -e esp32s3 - - name: Create esp32s3 zip file - run: /bin/sh scripts/esp32s3/mkzip.sh - - name: Upload esp32s3 binary to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: .pio/build/esp32s3/firmware.bin - asset_name: ams2mqtt-esp32s3-${{ steps.release_tag.outputs.tag }}.bin - asset_content_type: application/octet-stream - - name: Upload esp32s3 zip to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: esp32s3.zip - asset_name: ams2mqtt-esp32s3-${{ steps.release_tag.outputs.tag }}.zip - asset_content_type: application/zip - - - name: Build esp32solo firmware - run: pio run -e esp32solo - - name: Create esp32solo zip file - run: /bin/sh scripts/esp32solo/mkzip.sh - - name: Upload esp32solo binary to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: .pio/build/esp32solo/firmware.bin - asset_name: ams2mqtt-esp32solo-${{ steps.release_tag.outputs.tag }}.bin - asset_content_type: application/octet-stream - - name: Upload esp32solo zip to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: esp32solo.zip - asset_name: ams2mqtt-esp32solo-${{ steps.release_tag.outputs.tag }}.zip - asset_content_type: application/zip - - - name: Build esp32c3 firmware - run: pio run -e esp32c3 - - name: Create esp32c3 zip file - run: /bin/sh scripts/esp32c3/mkzip.sh - - name: Upload esp32c3 binary to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: .pio/build/esp32c3/firmware.bin - asset_name: ams2mqtt-esp32c3-${{ steps.release_tag.outputs.tag }}.bin - asset_content_type: application/octet-stream - - name: Upload esp32c3 zip to release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: esp32c3.zip - asset_name: ams2mqtt-esp32c3-${{ steps.release_tag.outputs.tag }}.zip - asset_content_type: application/zip + esp32s2: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32s2 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + esp32s3: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32s3 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + esp32c3: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32c3 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + esp32: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + esp32solo: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp32solo + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }} + esp8266: + needs: prepare + uses: ./.github/workflows/release-deploy-env.yml + secrets: inherit + with: + env: esp8266 + version: ${{ needs.prepare.outputs.version }} + upload_url: ${{ needs.prepare.outputs.upload_url }}