Skip to content

Commit 1e222d7

Browse files
Update update_Flash2MQTT.yml
1 parent 695043d commit 1e222d7

File tree

1 file changed

+30
-52
lines changed

1 file changed

+30
-52
lines changed

.github/workflows/update_Flash2MQTT.yml

Lines changed: 30 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ name: Update Central Firmware Repository
22

33
on:
44
release:
5-
types: [published]
5+
types: [published, edited]
6+
workflow_dispatch:
67

78
jobs:
89
update-central-repo:
10+
if: ${{ github.event.release.prerelease == false || github.event_name == 'workflow_dispatch' }}
911
runs-on: ubuntu-latest
1012
steps:
1113
- name: Checkout Repository
@@ -21,27 +23,33 @@ jobs:
2123
git clone https://all-solutions:${{ secrets.CENTRAL_REPO_TOKEN }}@github.com/all-solutions/Flash2MQTT.git Flash2MQTT
2224
2325
- name: Download Firmware Assets
26+
id: fetch-release
2427
uses: actions/github-script@v6
2528
with:
2629
github-token: ${{ secrets.GITHUB_TOKEN }}
2730
script: |
2831
const fs = require('fs');
2932
const owner = context.repo.owner;
3033
const repo = context.repo.repo;
31-
const releaseTag = context.payload.release.tag_name;
3234
33-
// Get the release by tag name
34-
const release = await github.rest.repos.getReleaseByTag({
35-
owner,
36-
repo,
37-
tag: releaseTag,
38-
});
35+
let release;
36+
let releaseTag;
37+
38+
if (context.eventName === 'release') {
39+
releaseTag = context.payload.release.tag_name;
40+
console.log(`Using release tag from event: ${releaseTag}`);
41+
release = await github.rest.repos.getReleaseByTag({ owner, repo, tag: releaseTag });
42+
} else {
43+
release = await github.rest.repos.getLatestRelease({ owner, repo });
44+
releaseTag = release.data.tag_name;
45+
console.log(`Using latest release tag: ${releaseTag}`);
46+
}
3947
40-
// Filter assets that end with .bin
4148
const assets = release.data.assets.filter(asset => asset.name.endsWith('.bin'));
4249
4350
if (assets.length === 0) {
4451
core.setFailed('No .bin assets found in the release.');
52+
return;
4553
}
4654
4755
for (const asset of assets) {
@@ -53,84 +61,61 @@ jobs:
5361
Accept: 'application/octet-stream',
5462
},
5563
});
56-
57-
// Write the asset to a file
5864
fs.writeFileSync(asset.name, Buffer.from(download.data));
5965
console.log(`Downloaded ${asset.name}`);
6066
}
6167
68+
core.setOutput('tag', releaseTag);
69+
6270
- name: List Downloaded Files
6371
run: ls -la
6472

6573
- name: Copy Firmware Files
6674
run: |
6775
mkdir -p Flash2MQTT/firmware/${{ github.event.repository.name }}
76+
rm -f Flash2MQTT/firmware/${{ github.event.repository.name }}/*.bin
6877
cp *.bin Flash2MQTT/firmware/${{ github.event.repository.name }}/
78+
echo "Updated at $(date -u)" > Flash2MQTT/firmware/${{ github.event.repository.name }}/last_update.txt
6979
7080
- name: Install jq
7181
run: sudo apt-get update && sudo apt-get install -y jq
7282

7383
- name: Update variants.json and firmware_list.json
7484
env:
7585
FIRMWARE_NAME: ${{ github.event.repository.name }}
76-
RELEASE_VERSION: ${{ github.event.release.tag_name }}
86+
RELEASE_VERSION: ${{ steps.fetch-release.outputs.tag }}
7787
run: |
7888
cd Flash2MQTT/firmware/${FIRMWARE_NAME}
7989
ls *.bin > bin_files.txt
80-
# Initialize variables
8190
total=0
8291
count=0
83-
# Remove 'v' or 'V' prefix from version if present
8492
version="${RELEASE_VERSION#v}"
8593
version="${version#V}"
8694
echo "Firmware Name: $FIRMWARE_NAME"
8795
echo "Release Version: $version"
88-
# Determine total number of desired variants
96+
8997
echo "Determining total number of desired variants..."
9098
while read file; do
91-
echo "Processing file: $file"
9299
if [[ "$file" == *"_${version}.bin" ]]; then
93-
echo "File matches current release version."
94100
variant_part=$(echo "$file" | sed -E 's/^'"$FIRMWARE_NAME"'_//; s/_'"${version}"'\.bin$//')
95101
variant_name="${variant_part}"
96-
echo "Extracted variant_name: $variant_name"
97102
if [[ "$variant_name" == "d1_mini" || "$variant_name" == "esp01_1m" ]]; then
98-
echo "Variant $variant_name is desired. Incrementing total."
99103
total=$((total + 1))
100-
else
101-
echo "Variant $variant_name is not desired."
102104
fi
103-
else
104-
echo "File does not match current release version."
105105
fi
106106
done < bin_files.txt
107-
echo "Total desired variants: $total"
108107
109-
# Start building variants.json
110108
echo '[' > variants.json
111-
# Process files and create variants.json
112-
echo "Building variants.json..."
113109
while read file; do
114-
echo "Processing file: $file"
115110
if [[ "$file" == *"_${version}.bin" ]]; then
116-
echo "File matches current release version."
117111
variant_part=$(echo "$file" | sed -E 's/^'"$FIRMWARE_NAME"'_//; s/_'"${version}"'\.bin$//')
118112
variant_name="${variant_part}"
119-
echo "Extracted variant_name: $variant_name"
120113
case "$variant_name" in
121-
"d1_mini")
122-
display_name="D1 Mini"
123-
;;
124-
"esp01_1m")
125-
display_name="ESP-01"
126-
;;
127-
*)
128-
echo "Variant $variant_name is not desired. Skipping."
129-
continue
130-
;;
114+
"d1_mini") display_name="D1 Mini" ;;
115+
"esp01_1m") display_name="ESP-01" ;;
116+
*) continue ;;
131117
esac
132118
count=$((count + 1))
133-
echo "Adding variant $display_name to variants.json."
134119
echo ' {' >> variants.json
135120
echo ' "displayName": "'"$display_name"'",' >> variants.json
136121
echo ' "file": "https://all-solutions.github.io/Flash2MQTT/firmware/'"$FIRMWARE_NAME"'/'"$file"'"' >> variants.json
@@ -139,36 +124,29 @@ jobs:
139124
else
140125
echo ' }' >> variants.json
141126
fi
142-
else
143-
echo "File does not match current release version."
144127
fi
145128
done < bin_files.txt
146129
echo ']' >> variants.json
147130
rm bin_files.txt
148131
149-
# Update firmware_list.json
150132
cd ..
151-
# Install jq if not already installed
152-
if ! command -v jq &> /dev/null; then
153-
sudo apt-get update && sudo apt-get install -y jq
154-
fi
155-
# Initialize firmware_list.json if it doesn't exist
156133
if [ ! -f firmware_list.json ]; then
157134
echo '[]' > firmware_list.json
158135
fi
159-
# Update firmware_list.json
160136
tmpfile=$(mktemp)
161137
jq --arg name "$FIRMWARE_NAME" --arg version "$version" \
162138
'if any(.[]; .name == $name) then map(if .name == $name then .version = $version else . end) else . + [{"name": $name, "version": $version}] end' \
163139
firmware_list.json > "$tmpfile" && mv "$tmpfile" firmware_list.json
164140
165141
- name: Commit and Push Changes
142+
env:
143+
RELEASE_VERSION: ${{ steps.fetch-release.outputs.tag }}
166144
run: |
167145
cd Flash2MQTT
168146
git add firmware/${{ github.event.repository.name }}
169147
git add firmware/firmware_list.json
170-
git commit -m "Update firmware for ${{ github.event.repository.name }} to version $version"
148+
git commit -m "Update firmware for ${{ github.event.repository.name }} to version $RELEASE_VERSION" || \
149+
git commit --allow-empty -m "Force update for ${{ github.event.repository.name }} to version $RELEASE_VERSION (no file changes)"
171150
git pull --rebase origin main
172151
git push https://all-solutions:${{ secrets.CENTRAL_REPO_TOKEN }}@github.com/all-solutions/Flash2MQTT.git HEAD:main
173152
174-

0 commit comments

Comments
 (0)