44 release :
55 types : [published, edited]
66 workflow_dispatch :
7+ inputs :
8+ tag :
9+ description : ' Release Tag (e.g. v1.2.3)'
10+ required : true
711
812jobs :
913 update-central-repo :
@@ -27,27 +31,31 @@ jobs:
2731 github-token : ${{ secrets.GITHUB_TOKEN }}
2832 script : |
2933 const fs = require('fs');
34+ const core = require('@actions/core');
35+
3036 const owner = context.repo.owner;
3137 const repo = context.repo.repo;
32- const releaseTag = context.payload.release.tag_name;
38+
39+ let releaseTag = context.payload?.release?.tag_name || core.getInput('tag');
40+
3341 if (!releaseTag) {
34- const latestRelease = await github.rest.repos.getLatestRelease({ owner, repo });
35- releaseTag = latestRelease.data.tag_name;
36- console.log(`No tag in payload. Using latest release tag: ${releaseTag}`);
42+ core.setFailed('No release tag found in event payload or input.');
43+ return;
3744 }
3845
39- // Get the release by tag name
46+ console.log(`Using release tag: ${releaseTag}`);
47+
4048 const release = await github.rest.repos.getReleaseByTag({
4149 owner,
4250 repo,
4351 tag: releaseTag,
4452 });
4553
46- // Filter assets that end with .bin
4754 const assets = release.data.assets.filter(asset => asset.name.endsWith('.bin'));
4855
4956 if (assets.length === 0) {
5057 core.setFailed('No .bin assets found in the release.');
58+ return;
5159 }
5260
5361 for (const asset of assets) {
6068 },
6169 });
6270
63- // Write the asset to a file
6471 fs.writeFileSync(asset.name, Buffer.from(download.data));
6572 console.log(`Downloaded ${asset.name}`);
6673 }
@@ -79,64 +86,41 @@ jobs:
7986 - name : Update variants.json and firmware_list.json
8087 env :
8188 FIRMWARE_NAME : ${{ github.event.repository.name }}
82- RELEASE_VERSION : ${{ github.event.release.tag_name }}
89+ RELEASE_VERSION : ${{ github.event.release.tag_name || github.event.inputs.tag }}
8390 run : |
8491 cd Flash2MQTT/firmware/${FIRMWARE_NAME}
8592 ls *.bin > bin_files.txt
86- # Initialize variables
8793 total=0
8894 count=0
89- # Remove 'v' or 'V' prefix from version if present
9095 version="${RELEASE_VERSION#v}"
9196 version="${version#V}"
9297 echo "Firmware Name: $FIRMWARE_NAME"
9398 echo "Release Version: $version"
94- # Determine total number of desired variants
99+
95100 echo "Determining total number of desired variants..."
96101 while read file; do
97102 echo "Processing file: $file"
98103 if [[ "$file" == *"_${version}.bin" ]]; then
99- echo "File matches current release version."
100104 variant_part=$(echo "$file" | sed -E 's/^'"$FIRMWARE_NAME"'_//; s/_'"${version}"'\.bin$//')
101105 variant_name="${variant_part}"
102- echo "Extracted variant_name: $variant_name"
103106 if [[ "$variant_name" == "d1_mini" || "$variant_name" == "esp01_1m" ]]; then
104- echo "Variant $variant_name is desired. Incrementing total."
105107 total=$((total + 1))
106- else
107- echo "Variant $variant_name is not desired."
108108 fi
109- else
110- echo "File does not match current release version."
111109 fi
112110 done < bin_files.txt
113111 echo "Total desired variants: $total"
114112
115- # Start building variants.json
116113 echo '[' > variants.json
117- # Process files and create variants.json
118- echo "Building variants.json..."
119114 while read file; do
120- echo "Processing file: $file"
121115 if [[ "$file" == *"_${version}.bin" ]]; then
122- echo "File matches current release version."
123116 variant_part=$(echo "$file" | sed -E 's/^'"$FIRMWARE_NAME"'_//; s/_'"${version}"'\.bin$//')
124117 variant_name="${variant_part}"
125- echo "Extracted variant_name: $variant_name"
126118 case "$variant_name" in
127- "d1_mini")
128- display_name="D1 Mini"
129- ;;
130- "esp01_1m")
131- display_name="ESP-01"
132- ;;
133- *)
134- echo "Variant $variant_name is not desired. Skipping."
135- continue
136- ;;
119+ "d1_mini") display_name="D1 Mini" ;;
120+ "esp01_1m") display_name="ESP-01" ;;
121+ *) continue ;;
137122 esac
138123 count=$((count + 1))
139- echo "Adding variant $display_name to variants.json."
140124 echo ' {' >> variants.json
141125 echo ' "displayName": "'"$display_name"'",' >> variants.json
142126 echo ' "file": "https://all-solutions.github.io/Flash2MQTT/firmware/'"$FIRMWARE_NAME"'/'"$file"'"' >> variants.json
@@ -145,24 +129,15 @@ jobs:
145129 else
146130 echo ' }' >> variants.json
147131 fi
148- else
149- echo "File does not match current release version"
150132 fi
151133 done < bin_files.txt
152134 echo ']' >> variants.json
153135 rm bin_files.txt
154136
155- # Update firmware_list.json
156137 cd ..
157- # Install jq if not already installed
158- if ! command -v jq &> /dev/null; then
159- sudo apt-get update && sudo apt-get install -y jq
160- fi
161- # Initialize firmware_list.json if it doesn't exist
162138 if [ ! -f firmware_list.json ]; then
163139 echo '[]' > firmware_list.json
164140 fi
165- # Update firmware_list.json
166141 tmpfile=$(mktemp)
167142 jq --arg name "$FIRMWARE_NAME" --arg version "$version" \
168143 'if any(.[]; .name == $name) then map(if .name == $name then .version = $version else . end) else . + [{"name": $name, "version": $version}] end' \
@@ -173,6 +148,8 @@ jobs:
173148 cd Flash2MQTT
174149 git add firmware/${{ github.event.repository.name }}
175150 git add firmware/firmware_list.json
176- git commit -m "Update firmware for ${{ github.event.repository.name }} to version $version" || git commit --allow-empty -m "Force update for ${{ github.event.repository.name }} to version $version (no file changes)"
151+ git commit -m "Update firmware for ${{ github.event.repository.name }} to version $version" || \
152+ git commit --allow-empty -m "Force update for ${{ github.event.repository.name }} to version $version (no file changes)"
177153 git pull --rebase origin main
178154 git push https://all-solutions:${{ secrets.CENTRAL_REPO_TOKEN }}@github.com/all-solutions/Flash2MQTT.git HEAD:main
155+
0 commit comments