Skip to content

Workflow file for this run

---
name: Build and Push OR check-PR
on:
pull_request:
branches:
- main
push:
branches:
- main
- dev
tags:
- "*"
workflow_dispatch:
jobs:
compile_sketch:
name: Build ${{ matrix.board.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
board:
- {
vendor: "M5Stack",
name: "Cardputer",
description: "",
link: "https://shop.m5stack.com/products/m5stack-cardputer-kit-w-m5stamps3?ref=Pirata",
family: "ESP32-S3",
env: "m5stack-cardputer",
partitions: {
bootloader_addr: "0x0000",
},
}
- {
vendor: "M5Stack",
name: "StickCPlus2",
description: "",
link: "https://shop.m5stack.com/products/m5stickc-plus2-esp32-mini-iot-development-kit?ref=Pirata",
family: "ESP32",
env: "m5stack-cplus2",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "M5Stack",
name: "StickCPlus",
description: "",
link: "https://shop.m5stack.com/products/m5stickc-plus-esp32-pico-mini-iot-development-kit?ref=Pirata",
family: "ESP32",
env: "m5stack-cplus1_1",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "M5Stack",
name: "StickC",
description: "",
link: "https://shop.m5stack.com/collections/m5-controllers?ref=Pirata",
family: "ESP32",
env: "m5stack-c",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "M5Stack",
name: "Core2",
description: "",
link: "https://shop.m5stack.com/products/m5stack-core2-esp32-iot-development-kit?ref=Pirata",
family: "ESP32",
env: "m5stack-core2",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "M5Stack",
name: "Core16mb",
description: "",
link: "https://shop.m5stack.com/products/esp32-basic-core-lot-development-kit-v2-7?ref=Pirata",
family: "ESP32",
env: "m5stack-core",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "M5Stack",
name: "CoreS3",
description: "",
link: "https://shop.m5stack.com/products/m5stack-cores3-esp32s3-lotdevelopment-kit?ref=Pirata",
family: "ESP32-S3",
env: "m5stack-cores3",
partitions: {
bootloader_addr: "0x0",
},
}
- {
vendor: "Espressif",
name: "ESP32-S3-4mb",
description: "",
link: "",
family: "ESP32-S3",
env: "headless-esp32s3-4mb",
partitions: {
bootloader_addr: "0x0",
},
}
- {
vendor: "Espressif",
name: "ESP32-S3-8mb",
description: "",
link: "",
family: "ESP32-S3",
env: "headless-esp32s3-8mb",
partitions: {
bootloader_addr: "0x0",
},
}
- {
vendor: "Espressif",
name: "ESP32-S3-16mb",
description: "",
link: "",
family: "ESP32-S3",
env: "headless-esp32s3-16mb",
partitions: {
bootloader_addr: "0x0",
},
}
- {
vendor: "Espressif",
name: "ESP32-4mb",
description: "",
link: "",
family: "ESP32",
env: "headless-esp32-4mb",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "Espressif",
name: "ESP32-8mb",
description: "",
link: "",
family: "ESP32",
env: "headless-esp32-8mb",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "CYD",
name: "CYD-2432S028",
description: "(Resistive)",
link: "",
family: "ESP32",
env: "CYD-2432S028",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "CYD",
name: "CYD-2432S028_inv",
description: "(Resistive) Inverted Colors",
link: "",
family: "ESP32",
env: "CYD-2-USB",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "CYD",
name: "CYD-2432W328C_inv",
description: "(Capacitive) Inverted Colors and 2.4in",
link: "",
family: "ESP32",
env: "CYD-2432W328C_2",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "CYD",
name: "CYD-2432W328C",
description: "(Capacitive)",
link: "",
family: "ESP32",
env: "CYD-2432W328C",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "Marauder",
name: "V4-OG",
description: "",
link: "",
family: "ESP32",
env: "Marauder-v4-OG",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "Marauder",
name: "Mini",
description: "",
link: "",
family: "ESP32",
env: "Marauder-Mini",
partitions: {
bootloader_addr: "0x1000",
},
}
- {
vendor: "Lilygo",
name: "T-Display_S3_Touch",
description: "",
link: "https://lilygo.cc/products/t-display-s3?_pos=1&_sid=d7b2ebc22&_ss=r&variant=42589373268149",
family: "ESP32-S3",
env: "lilygo-t-display-S3",
partitions: {
bootloader_addr: "0x0",
},
}
- {
vendor: "Lilygo",
name: "T-Embed",
description: "",
link: "https://lilygo.cc/products/t-embed",
family: "ESP32-S3",
env: "lilygo-t-embed",
partitions: {
bootloader_addr: "0x0",
},
}
- {
vendor: "Lilygo",
name: "T-Embed_CC1101",
description: "(Transparent version)",
link: "https://lilygo.cc/products/t-embed-cc1101",
family: "ESP32-S3",
env: "lilygo-t-embed-cc1101",
partitions: {
bootloader_addr: "0x0",
},
}
- {
vendor: "Lilygo",
name: "T-Deck",
description: "(Normal and Plus)",
link: "https://lilygo.cc/products/t-deck",
family: "ESP32-S3",
env: "lilygo-t-deck",
partitions: {
bootloader_addr: "0x0",
},
}
steps:
- uses: actions/checkout@v4
- id: build
name: setup Python
uses: actions/setup-python@v2
with:
python-version: "3.x"
- name: Install dependencies
run: |
pip install requests esptool
- name: Install PlatformIO Core
run: |
pip install platformio
if [[ "${{ github.ref_type }}" == "tag" ]]; then
version=${{ github.ref_name }}
else
version="${GITHUB_SHA::7}"
fi
sed -i "s/-DLAUNCHER=/-DLAUNCHER='\"$version\"' ; /g" ./platformio.ini
- name: Run Compile
run: |
platformio run -e ${{ matrix.board.env }}
- name: Merge files
run: |
esptool.py --chip esp32s3 merge_bin -o Launcher-${{ matrix.board.env }}.bin \
${{ matrix.board.partitions.bootloader_addr }} .pio/build/${{ matrix.board.env }}/bootloader.bin \
0x8000 .pio/build/${{ matrix.board.env }}/partitions.bin \
0x10000 .pio/build/${{ matrix.board.env }}/firmware.bin
js_content="{\"name\":\"${{ matrix.board.name }}\",\"builds\":[{\"chipFamily\":\"${{ matrix.board.family }}\",\"improv\":false,\"parts\":[{\"path\":\"bins/Launcher-${{ matrix.board.env }}.bin\",\"offset\":0}]}]}"
echo "$js_content" > "./Manifest-${{ matrix.board.env }}.json"
if [[ "${{ matrix.board.link }}" == "" ]]; then
html="<input type='radio' name='type' value='${{ matrix.board.env }}' id='${{ matrix.board.env }}' /><label for='${{ matrix.board.env}}'>${{ matrix.board.name }} ${{ matrix.board.description }}</label>"
else
html="<input type='radio' name='type' value='${{ matrix.board.env }}' id='${{ matrix.board.env }}' /><label for='${{ matrix.board.env}}'>${{ matrix.board.name }} <a href='${{ matrix.board.link }}' target='_blank' rel='noopener noreferrer'>(link)</a> ${{ matrix.board.description }}</label>"
fi
echo "$html" > ./Launcher-${{ matrix.board.vendor }}.html
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: Artifacts-${{ matrix.board.name }}
path: |
Launcher-*.bin
Manifest-*.json
Launcher-*.html
retention-days: 5
if-no-files-found: error
post_compile_steps:
name: Post-compile steps
runs-on: ubuntu-latest
needs: compile_sketch
if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') || github.ref_type == 'tag'
steps:
- uses: actions/checkout@v4
with:
# Configura para garantir que todas as branches sejam buscadas
fetch-depth: 0
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: ~/LauncherArtifacts
- name: Clone Launcher repository and switch to WebPage branch
run: |
git fetch origin
git checkout WebPage || git checkout -b WebPage origin/WebPage
- name: Generate HTML and manifests from Boards
run: |
# Variáveis para armazenar os conteúdos dos arquivos específicos
m5stack="\n"
lilygo="\n"
esp32="\n"
cyd="\n"
marauder="\n"
# Itera sobre cada arquivo HTML na pasta de artefatos
for file in ~/LauncherArtifacts/**/*.html; do
if [ -f "$file" ]; then
content=$(cat "$file") # Lê o conteúdo do arquivo
case "$(basename "$file")" in
"Launcher-M5Stack.html")
m5stack+="$content\n" # Salva o conteúdo na variável correspondente
;;
"Launcher-Lilygo.html")
lilygo+="$content\n"
;;
"Launcher-Espressif.html")
esp32+="$content\n"
;;
"Launcher-CYD.html")
cyd+="$content\n"
;;
"Launcher-Marauder.html")
marauder+="$content\n"
;;
esac
echo "$file" # Exibe o caminho do arquivo processado
fi
done
# Começa a lista HTML
html="<ul class='device-list m5stack'>"
html+="$m5stack"
html+="</ul>"
html+="<ul class='device-list lilygo'>"
html+="$lilygo"
html+="</ul>"
html+="<ul class='device-list cyd'>"
html+="$cyd"
html+="</ul>"
html+="<ul class='device-list marauder'>"
html+="$marauder"
html+="</ul>"
html+="<ul class='device-list esp32'>"
html+="$esp32"
html+="</ul>"
# Exibe as quebras de linha
html=$(echo -e "$html")
# Exibe as variáveis para verificar
echo "M5Stack Content: $m5stack"
echo "Lilygo Content: $lilygo"
echo "ESP32 Content: $esp32"
echo "CYD Content: $cyd"
echo "$html" > ~/file.html
cat ~/file.html
rm ./index.html
cp ./support_files/flasher ./index.html
python ./support_files/merge_html.py ./index.html ~/file.html
- name: Move artifacts to the correct folders
run: |
set -x
pwd
ls -all
tree
if [ "${{ github.ref_type }}" == "tag" ]; then
cp -f ~/LauncherArtifacts/*/*.bin ./Release/bins
elif [ "${{ github.ref_type }}" != "tag" ]; then
cp -f ~/LauncherArtifacts/*/*.bin ./Beta/bins
fi
cp -f ~/LauncherArtifacts/*/*.json ./Release
cp -f ~/LauncherArtifacts/*/*.json ./Beta
- name: Commit and push changes
run: |
git config user.name "GitHub Actions"
git config user.email "[email protected]"
git add .
git commit -m "Update artifacts from build"
git push origin WebPage
create_release:
runs-on: ubuntu-latest
environment: github_release
needs: [compile_sketch]
if: github.ref_type == 'tag'
steps:
- id: launcher_version
name: Get Version
run: |
set -x
version=${{ github.ref_name }}
echo "version=${version}" > $GITHUB_OUTPUT
- uses: actions/download-artifact@v4
with:
merge-multiple: true
- name: List all files
if: always()
run: |
set -x
pwd
ls -all
tree
- name: Create Release ${{ steps.launcher_version.outputs.version }}
uses: softprops/action-gh-release@v1
with:
name: Launcher Release ${{ steps.launcher_version.outputs.version }}
tag_name: ${{ steps.launcher_version.outputs.version }}
generate_release_notes: true
files: |
Launcher-*.bin