Skip to content

Commit ea700bf

Browse files
Update update_central_repo.yml
1 parent 25db2db commit ea700bf

1 file changed

Lines changed: 40 additions & 13 deletions

File tree

.github/workflows/update_central_repo.yml

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ name: Update Central Firmware Repository
22

33
on:
44
release:
5-
types: [published, edited]
5+
types: [published]
66
workflow_dispatch:
7+
schedule:
8+
- cron: "*/20 * * * *" # alle 20 Minuten
79

810
jobs:
911
update-central-repo:
10-
if: ${{ github.event.release.prerelease == false || github.event_name == 'workflow_dispatch' }}
12+
if: ${{ (github.event_name == 'release' && github.event.release.prerelease == false) || github.event_name != 'release' }}
1113
runs-on: ubuntu-latest
1214
steps:
1315
- name: Checkout Repository
@@ -22,30 +24,48 @@ jobs:
2224
run: |
2325
git clone https://all-solutions:${{ secrets.CENTRAL_REPO_TOKEN }}@github.com/all-solutions/Flash2MQTT.git Flash2MQTT
2426
25-
- name: Download Firmware Assets
27+
- name: Check and Download Firmware Assets
2628
id: fetch-release
2729
uses: actions/github-script@v6
2830
with:
2931
github-token: ${{ secrets.GITHUB_TOKEN }}
3032
script: |
3133
const fs = require('fs');
34+
const path = require('path');
3235
const owner = context.repo.owner;
3336
const repo = context.repo.repo;
3437
3538
let release;
3639
let releaseTag;
3740
3841
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+
release = context.payload.release;
43+
releaseTag = release.tag_name;
44+
console.log(`Using release from event: ${releaseTag}`);
4245
} 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+
const res = await github.rest.repos.getLatestRelease({ owner, repo });
47+
release = res.data;
48+
releaseTag = release.tag_name;
49+
console.log(`Using latest release: ${releaseTag}`);
50+
51+
if (context.eventName === 'schedule') {
52+
const cachePath = path.join(process.cwd(), 'Flash2MQTT', 'release_check.json');
53+
let last = {};
54+
if (fs.existsSync(cachePath)) {
55+
last = JSON.parse(fs.readFileSync(cachePath, 'utf8'));
56+
}
57+
58+
if (last.id === release.id && last.updated_at === release.updated_at) {
59+
console.log('Release unchanged. Skipping.');
60+
core.setOutput('skip', 'true');
61+
return;
62+
}
63+
64+
fs.writeFileSync(cachePath, JSON.stringify({ id: release.id, updated_at: release.updated_at }));
65+
}
4666
}
4767
48-
const assets = release.data.assets.filter(asset => asset.name.endsWith('.bin'));
68+
const assets = release.assets.filter(asset => asset.name.endsWith('.bin'));
4969
5070
if (assets.length === 0) {
5171
core.setFailed('No .bin assets found in the release.');
@@ -61,26 +81,35 @@ jobs:
6181
Accept: 'application/octet-stream',
6282
},
6383
});
84+
6485
fs.writeFileSync(asset.name, Buffer.from(download.data));
6586
console.log(`Downloaded ${asset.name}`);
6687
}
6788
6889
core.setOutput('tag', releaseTag);
6990
91+
- name: Skip if not updated
92+
if: ${{ steps.fetch-release.outputs.skip == 'true' }}
93+
run: echo "Release has not changed, skipping workflow."
94+
7095
- name: List Downloaded Files
96+
if: ${{ steps.fetch-release.outputs.skip != 'true' }}
7197
run: ls -la
7298

7399
- name: Copy Firmware Files
100+
if: ${{ steps.fetch-release.outputs.skip != 'true' }}
74101
run: |
75102
mkdir -p Flash2MQTT/firmware/${{ github.event.repository.name }}
76103
rm -f Flash2MQTT/firmware/${{ github.event.repository.name }}/*.bin
77104
cp *.bin Flash2MQTT/firmware/${{ github.event.repository.name }}/
78105
echo "Updated at $(date -u)" > Flash2MQTT/firmware/${{ github.event.repository.name }}/last_update.txt
79106
80107
- name: Install jq
108+
if: ${{ steps.fetch-release.outputs.skip != 'true' }}
81109
run: sudo apt-get update && sudo apt-get install -y jq
82110

83111
- name: Update variants.json and firmware_list.json
112+
if: ${{ steps.fetch-release.outputs.skip != 'true' }}
84113
env:
85114
FIRMWARE_NAME: ${{ github.event.repository.name }}
86115
RELEASE_VERSION: ${{ steps.fetch-release.outputs.tag }}
@@ -91,10 +120,7 @@ jobs:
91120
count=0
92121
version="${RELEASE_VERSION#v}"
93122
version="${version#V}"
94-
echo "Firmware Name: $FIRMWARE_NAME"
95-
echo "Release Version: $version"
96123
97-
echo "Determining total number of desired variants..."
98124
while read file; do
99125
if [[ "$file" == *"_${version}.bin" ]]; then
100126
variant_part=$(echo "$file" | sed -E 's/^'"$FIRMWARE_NAME"'_//; s/_'"${version}"'\.bin$//')
@@ -139,6 +165,7 @@ jobs:
139165
firmware_list.json > "$tmpfile" && mv "$tmpfile" firmware_list.json
140166
141167
- name: Commit and Push Changes
168+
if: ${{ steps.fetch-release.outputs.skip != 'true' }}
142169
env:
143170
RELEASE_VERSION: ${{ steps.fetch-release.outputs.tag }}
144171
run: |

0 commit comments

Comments
 (0)