diff --git a/.github/workflows/ci_release.yml b/.github/workflows/ci_release.yml index 345173c4d..f88d246ed 100644 --- a/.github/workflows/ci_release.yml +++ b/.github/workflows/ci_release.yml @@ -1,165 +1,300 @@ -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven - -name: Release builds +name: Espressif-IDE Cross-platform Release on: push: tags: - "v[0-9]+.[0-9]+.[0-9]+" -jobs: - build: +env: + ARCHIVE_PREFIX: com.espressif.idf.update- + ARCHIVE_SUFFIX: -SNAPSHOT.zip +jobs: + macos-build: runs-on: macos-latest - + outputs: + version: ${{ steps.get_version.outputs.version }} steps: - - uses: actions/checkout@v3 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - - - name: Build with Maven - run: | - export JARSIGNER_KEYSTORE_B64=${{secrets.JARSIGNER_REL_KEYSTORE_B64}} - export JARSIGNER_STOREPASS=${{secrets.JARSIGNER_REL_STOREPASS}} - export JARSIGNER_ALIAS=${{secrets.JARSIGNER_REL_ALIAS}} - KEYSTORE_FILE="${PWD}/{{secrets.JARSIGNER_KEYSTORE}}" - echo "${KEYSTORE_FILE}" - printf "%s" "${JARSIGNER_KEYSTORE_B64}" | base64 -d > "${KEYSTORE_FILE}" - mvn -e -X clean install -Djarsigner.keystore="${KEYSTORE_FILE}" -Djarsigner.alias="${JARSIGNER_ALIAS}" -Djarsigner.storepass="${JARSIGNER_STOREPASS}" -DskipTests=true - rm -v "${KEYSTORE_FILE}" - - - name: Codesign Espressif-IDE - env: - MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} - MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }} - run: | - echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 - /usr/bin/security create-keychain -p espressif build.keychain - /usr/bin/security default-keychain -s build.keychain - /usr/bin/security unlock-keychain -p espressif build.keychain - /usr/bin/security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign - /usr/bin/security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k espressif build.keychain - - echo "codesigning espressif-ide-macosx.cocoa.x86_64" - /usr/bin/codesign --entitlements $PWD/releng/com.espressif.idf.product/entitlements/espressif-ide.entitlement --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/x86_64/Espressif-IDE.app -v - /usr/bin/codesign -v -vvv --deep $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/x86_64/Espressif-IDE.app + - uses: actions/checkout@v3 - echo "codesigning espressif-ide-macosx.cocoa.aarch64" - /usr/bin/codesign --entitlements $PWD/releng/com.espressif.idf.product/entitlements/espressif-ide.entitlement --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/aarch64/Espressif-IDE.app -v - /usr/bin/codesign -v -vvv --deep $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/aarch64/Espressif-IDE.app - - echo "Creating dmg for espressif-ide-macosx.cocoa.x86_64" - $PWD/releng/ide-dmg-builder/ide-dmg-builder.sh - /usr/bin/codesign --entitlements $PWD/releng/com.espressif.idf.product/entitlements/espressif-ide.entitlement --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg -v - /usr/bin/codesign -v -vvv --deep $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg - - echo "Creating dmg for espressif-ide-macosx.cocoa.aarch64" - $PWD/releng/ide-dmg-builder/ide-dmg-builder-aarch64.sh - /usr/bin/codesign --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg -v - /usr/bin/codesign -v -vvv --deep $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: Get version from tag + id: get_version + run: echo "version=${GITHUB_REF##*/v}" >> $GITHUB_OUTPUT + + - name: Decode keystore and build with Maven + env: + JARSIGNER_KEYSTORE_B64: ${{ secrets.JARSIGNER_REL_KEYSTORE_B64 }} + JARSIGNER_STOREPASS: ${{ secrets.JARSIGNER_REL_STOREPASS }} + JARSIGNER_ALIAS: ${{ secrets.JARSIGNER_REL_ALIAS }} + run: | + KEYSTORE_FILE="${PWD}/{{secrets.JARSIGNER_KEYSTORE}}" + echo "${KEYSTORE_FILE}" + printf "%s" "${JARSIGNER_KEYSTORE_B64}" | base64 -d > "${KEYSTORE_FILE}" + mvn -e -X clean install -Djarsigner.keystore="${KEYSTORE_FILE}" -Djarsigner.alias="${JARSIGNER_ALIAS}" -Djarsigner.storepass="${JARSIGNER_STOREPASS}" -DskipTests=true + rm -v "${KEYSTORE_FILE}" + + - name: Codesign Espressif-IDE + env: + MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} + MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }} + run: | + echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12 + /usr/bin/security create-keychain -p espressif build.keychain + /usr/bin/security default-keychain -s build.keychain + /usr/bin/security unlock-keychain -p espressif build.keychain + /usr/bin/security import certificate.p12 -k build.keychain -P $MACOS_CERTIFICATE_PWD -T /usr/bin/codesign + /usr/bin/security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k espressif build.keychain + + echo "codesigning espressif-ide-macosx.cocoa.x86_64" + /usr/bin/codesign --entitlements $PWD/releng/com.espressif.idf.product/entitlements/espressif-ide.entitlement --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/x86_64/Espressif-IDE.app -v + /usr/bin/codesign -v -vvv --deep $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/x86_64/Espressif-IDE.app - - name: Notarization of Espressif-IDE dmg files - env: + echo "codesigning espressif-ide-macosx.cocoa.aarch64" + /usr/bin/codesign --entitlements $PWD/releng/com.espressif.idf.product/entitlements/espressif-ide.entitlement --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/aarch64/Espressif-IDE.app -v + /usr/bin/codesign -v -vvv --deep $PWD/releng/com.espressif.idf.product/target/products/com.espressif.idf.product/macosx/cocoa/aarch64/Espressif-IDE.app + + echo "Creating dmg for espressif-ide-macosx.cocoa.x86_64" + $PWD/releng/ide-dmg-builder/ide-dmg-builder.sh + /usr/bin/codesign --entitlements $PWD/releng/com.espressif.idf.product/entitlements/espressif-ide.entitlement --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg -v + /usr/bin/codesign -v -vvv --deep $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg + + echo "Creating dmg for espressif-ide-macosx.cocoa.aarch64" + $PWD/releng/ide-dmg-builder/ide-dmg-builder-aarch64.sh + /usr/bin/codesign --options runtime --force -s "ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. (QWXF6GB4AV)" $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg -v + /usr/bin/codesign -v -vvv --deep $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg + + - name: Notarization of Espressif-IDE dmg files + env: NOTARIZATION_USERNAME: ${{ secrets.NOTARIZATION_USERNAME }} NOTARIZATION_PASSWORD: ${{ secrets.NOTARIZATION_PASSWORD }} NOTARIZATION_TEAM_ID: ${{ secrets.NOTARIZATION_TEAM_ID }} - run: | - echo "Create notary keychain" - /usr/bin/security create-keychain -p espressif notary.keychain - /usr/bin/security default-keychain -s notary.keychain - /usr/bin/security unlock-keychain -p espressif notary.keychain - - echo "Create keychain profile" - xcrun notarytool store-credentials "ide-notarytool-profile" --apple-id $NOTARIZATION_USERNAME --team-id $NOTARIZATION_TEAM_ID --password $NOTARIZATION_PASSWORD - xcrun notarytool submit $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg --keychain-profile "ide-notarytool-profile" --wait - - echo "Attach staple for x86_64.dmg" - xcrun stapler staple $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg - - echo "Unlock the notary keychain" - /usr/bin/security unlock-keychain -p espressif notary.keychain - - xcrun notarytool submit $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg --keychain-profile "ide-notarytool-profile" --wait - echo "Attach staple for aarch64.dmg" - xcrun stapler staple $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg - - - name: Upload Espressif-IDE-macosx-cocoa-x86_64.dmg - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 + run: | + echo "Create notary keychain" + /usr/bin/security create-keychain -p espressif notary.keychain + /usr/bin/security default-keychain -s notary.keychain + /usr/bin/security unlock-keychain -p espressif notary.keychain + + echo "Create keychain profile" + xcrun notarytool store-credentials "ide-notarytool-profile" --apple-id $NOTARIZATION_USERNAME --team-id $NOTARIZATION_TEAM_ID --password $NOTARIZATION_PASSWORD + xcrun notarytool submit $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg --keychain-profile "ide-notarytool-profile" --wait + + echo "Attach staple for x86_64.dmg" + xcrun stapler staple $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg + + echo "Unlock the notary keychain" + /usr/bin/security unlock-keychain -p espressif notary.keychain + + xcrun notarytool submit $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg --keychain-profile "ide-notarytool-profile" --wait + echo "Attach staple for aarch64.dmg" + xcrun stapler staple $PWD/releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg + + - name: Upload Espressif-IDE-macosx-cocoa-x86_64.dmg + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: espressif-ide-macosx-cocoa-x86_64 + path: releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg + + - name: Upload Espressif-IDE-macosx-cocoa-aarch64.dmg + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: espressif-ide-macosx.cocoa.aarch64 + path: releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg + + - name: Upload build artifacts + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: com.espressif.idf.update + path: releng/com.espressif.idf.update/target/repository + + - name: Upload windows rcp + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: espressif-ide-win32 + path: releng/com.espressif.idf.product/target/products/Espressif-IDE-*-win32.win32.x86_64.zip + + - name: Upload linux rcp + if: ${{ !cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: espressif-ide-linux + path: releng/com.espressif.idf.product/target/products/Espressif-IDE-*-linux.gtk.x86_64.tar.gz + + + windows-sign: + runs-on: windows-latest + needs: macos-build + env: + JKS_B64: ${{ secrets.JARSIGNER_REL_KEYSTORE_B64 }} + JKS_PASS: ${{ secrets.JARSIGNER_REL_STOREPASS }} + ALIAS: ${{ secrets.JARSIGNER_REL_ALIAS }} + PFX_PASS: ${{ secrets.JARSIGNER_REL_STOREPASS }} + steps: + - uses: actions/checkout@v3 + + - name: Download built artifacts + uses: actions/download-artifact@v4 + with: + name: espressif-ide-win32 + path: artifacts + + + - name: Verify the downloaded file + shell: pwsh + run: | + ls .\artifacts\* + + - name: Extract Windows ZIP + shell: pwsh + run: | + Expand-Archive -Path artifacts\*.zip -DestinationPath extracted -Force + ls .\artifacts\* + + - name: Decode base64-encoded JKS + run: | + echo "$env:JKS_B64" | Out-File -FilePath encoded.b64 -Encoding ASCII + certutil -decode encoded.b64 mykeystore.jks + Remove-Item encoded.b64 + + - name: Convert JKS to PFX + shell: pwsh + run: | + & "${env:JAVA_HOME}\bin\keytool.exe" -importkeystore ` + -srckeystore mykeystore.jks ` + -srcstorepass $env:JKS_PASS ` + -srcalias $env:ALIAS ` + -destkeystore cert.pfx ` + -deststoretype PKCS12 ` + -deststorepass $env:PFX_PASS + + - name: Sign Windows Executable + shell: pwsh + run: | + $exe = Get-ChildItem -Recurse extracted\Espressif-IDE\espressif-ide.exe | Select-Object -First 1 + & "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe" sign ` + /f cert.pfx ` + /p $env:PFX_PASS ` + /tr http://timestamp.digicert.com ` + /td sha256 ` + /fd sha256 ` + $exe.FullName + + - name: Verify Signature + run: | + $exe = Get-ChildItem -Recurse extracted\Espressif-IDE\espressif-ide.exe | Select-Object -First 1 + & "C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86\signtool.exe" verify ` + /pa ` + $exe.FullName + + - name: Removing original ZIP from extracted folder + run: | + Remove-Item -Force artifacts\*.zip + + - name: Delete the unsigned Binary + uses: geekyeggo/delete-artifact@v5 + with: + name: espressif-ide-win32 + failOnError: false + + - name: Upload Signed Windows ZIP + uses: actions/upload-artifact@v4 + with: + name: espressif-ide-win32 + path: extracted/ + overwrite: true + if-no-files-found: error + + upload-aws: + runs-on: macos-latest + needs: windows-sign + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} + steps: + - uses: actions/checkout@v3 + + - name: Download built windows artifact + uses: actions/download-artifact@v4 + with: + name: espressif-ide-win32 + path: artifacts/win32 + + - name: Download built linux artifact + uses: actions/download-artifact@v4 + with: + name: espressif-ide-linux + path: artifacts/linux + + - name: Download macOS x86_64 dmg zip + uses: actions/download-artifact@v4 with: name: espressif-ide-macosx-cocoa-x86_64 - path: releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg + path: artifacts/macos_x86 - - name: Upload Espressif-IDE-macosx-cocoa-aarch64.dmg - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 + - name: Download macOS aarch64 dmg zip + uses: actions/download-artifact@v4 with: name: espressif-ide-macosx.cocoa.aarch64 - path: releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg + path: artifacts/macos_arm - - name: Upload build artifacts - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 + - name: Download update site zip + uses: actions/download-artifact@v4 with: name: com.espressif.idf.update - path: releng/com.espressif.idf.update/target/repository - - - name: Upload windows rcp - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 - with: - name: espressif-ide-win32 - path: releng/com.espressif.idf.product/target/products/Espressif-IDE-*-win32.win32.x86_64.zip + path: artifacts/update - - name: Upload linux rcp - if: ${{ !cancelled() }} - uses: actions/upload-artifact@v4 - with: - name: espressif-ide-linux - path: releng/com.espressif.idf.product/target/products/Espressif-IDE-*-linux.gtk.x86_64.tar.gz + - name: Extract version from tag and prepare folder + id: get_version + run: | + if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then + TAG="${GITHUB_REF##*/}" + VERSION="${TAG#v}" + else + VERSION="testing" + fi + echo "version=$VERSION" >> "$GITHUB_ENV" + echo "FOLDER=v${VERSION}" >> $GITHUB_ENV + + - name: Rename DMGs with version suffix + run: | + mv artifacts/macos_x86/Espressif-IDE-macosx-cocoa-x86_64.dmg artifacts/macos_x86/Espressif-IDE-macosx-cocoa-x86_64-v${{ env.VERSION }}.dmg + mv artifacts/macos_arm/Espressif-IDE-macosx-cocoa-aarch64.dmg artifacts/macos_arm/Espressif-IDE-macosx-cocoa-aarch64-v${{ env.VERSION }}.dmg + - name: Compress the archives for upload + run: | + zip -r com.espressif.idf.update-v${{ env.VERSION }}.zip artifacts/update/* + zip -r Espressif-IDE-${{ env.VERSION }}-win32.win32.x86_64.zip artifacts/win32/* - name: Upload build assets to dl.espressif.com - id: upload-release-asset-espressif - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} run: | - ARCHIVE_DIR="/releng/com.espressif.idf.update/target/" - ARCHIVE_NAME="com.espressif.idf.update*.zip" - echo "${ARCHIVE_DIR}" - echo ${PWD}${ARCHIVE_DIR} - ARCHIVE_FILE_NAME="$(find ${PWD}${ARCHIVE_DIR}${ARCHIVE_NAME})" - echo "${ARCHIVE_FILE_NAME}" - ARCHIVE_PREFIX="com.espressif.idf.update-" - ARCHIVE_SUFFIX="-SNAPSHOT.zip"; - tmp=${ARCHIVE_FILE_NAME#*${ARCHIVE_PREFIX}} # remove prefix - ARCHIVE_VERSION=${tmp%${ARCHIVE_SUFFIX}*} # remove suffix - echo "${ARCHIVE_VERSION}" - FOLDER_NAME="v${ARCHIVE_VERSION}" - mkdir "${FOLDER_NAME}" && cd "${FOLDER_NAME}" && unzip -q ${ARCHIVE_FILE_NAME} && cd .. - echo ${PWD} - ARCHIVE_VERSION_NEW="${ARCHIVE_PREFIX}${ARCHIVE_VERSION}.zip" - echo ${ARCHIVE_VERSION_NEW} - mv ${ARCHIVE_FILE_NAME} ${ARCHIVE_VERSION_NEW} - mv releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64.dmg "releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64-${FOLDER_NAME}.dmg" - mv releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64.dmg "releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64-${FOLDER_NAME}.dmg" aws s3 rm s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/latest --recursive - aws s3 cp --acl=public-read --recursive "./${FOLDER_NAME}/" s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/latest - aws s3 cp --acl=public-read "./releng/index.html" s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/latest/ - aws s3 cp --acl=public-read --recursive "./${FOLDER_NAME}/" s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/${FOLDER_NAME} - aws s3 cp --acl=public-read --recursive --exclude "*" --include "Espressif-IDE-*" ./releng/com.espressif.idf.product/target/products/ s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/ide/ - aws s3 cp --acl=public-read "${ARCHIVE_VERSION_NEW}" s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/ - aws s3 cp --acl=public-read "./releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-x86_64-${FOLDER_NAME}.dmg" s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/ide/ - aws s3 cp --acl=public-read "./releng/ide-dmg-builder/Espressif-IDE-macosx-cocoa-aarch64-${FOLDER_NAME}.dmg" s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/ide/ + + aws s3 cp --acl=public-read --recursive artifacts/linux/ s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/latest + aws s3 cp --acl=public-read ./releng/index.html s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/latest/ + + aws s3 cp --acl=public-read --recursive artifacts/linux/ s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/v${{ env.VERSION }} + + aws s3 cp --acl=public-read com.espressif.idf.update-v${{ env.VERSION }}.zip s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/updates/ + aws s3 cp --acl=public-read artifacts/macos_x86/Espressif-IDE-macosx-cocoa-x86_64-v${{ env.VERSION }}.dmg s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/ide/ + aws s3 cp --acl=public-read artifacts/macos_arm/Espressif-IDE-macosx-cocoa-aarch64-v${{ env.VERSION }}.dmg s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/ide/ + aws s3 cp --acl=public-read Espressif-IDE-${{ env.VERSION }}-win32.win32.x86_64.zip s3://${{ secrets.DL_BUCKET }}/dl/idf-eclipse-plugin/ide/ + aws cloudfront create-invalidation --distribution-id ${{ secrets.DL_DISTRIBUTION_ID }} --paths "/dl/idf-eclipse-plugin/updates/latest/*" - aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin/ide/Espressif-IDE-win32.win32.x86_64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-${ARCHIVE_VERSION}-win32.win32.x86_64.zip" - aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin/ide/Espressif-IDE-macosx-cocoa-x86_64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-macosx-cocoa-x86_64-v${ARCHIVE_VERSION}.dmg" - aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin/ide/Espressif-IDE-macosx-cocoa-aarch64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-macosx-cocoa-aarch64-v${ARCHIVE_VERSION}.dmg" - aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin/ide/Espressif-IDE-linux.gtk.x86_64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-${ARCHIVE_VERSION}-linux.gtk.x86_64.tar.gz" + + aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin-test/ide/Espressif-IDE-win32.win32.x86_64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-${{ env.VERSION }}-win32.win32.x86_64.zip" + + aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin-test/ide/Espressif-IDE-macosx-cocoa-x86_64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-macosx-cocoa-x86_64-v${{ env.VERSION }}.dmg" + + aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin-test/ide/Espressif-IDE-macosx-cocoa-aarch64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-macosx-cocoa-aarch64-v${{ env.VERSION }}.dmg" + + aws s3api put-object --acl=public-read --bucket espdldata --key "dl/idf-eclipse-plugin-test/ide/Espressif-IDE-linux.gtk.x86_64/latest" --website-redirect-location "/dl/idf-eclipse-plugin/ide/Espressif-IDE-${{ env.VERSION }}-linux.gtk.x86_64.tar.gz"