Compare commits

...

17 Commits

Author SHA1 Message Date
elseif
8162e48464 modified: .github/workflows/main.yml 2026-09-03 21:20:45 +08:00
elseif
fec8972b11 modified: .github/workflows/main.yml 2026-09-03 20:26:08 +08:00
elseif
6307abfa84 modified: .github/workflows/main.yml 2026-09-03 20:25:32 +08:00
elseif
777f09760b modified: .github/workflows/main.yml 2026-09-03 20:09:47 +08:00
elseif
da9a657837 modified: .github/workflows/main.yml 2026-09-03 20:05:46 +08:00
elseif
a925bfaa51 modified: .github/workflows/main.yml 2026-09-03 19:57:16 +08:00
elseif
41e23585ef modified: .github/workflows/main.yml 2026-09-03 19:54:49 +08:00
elseif
778e0adc1d modified: .github/workflows/main.yml 2026-09-03 19:52:18 +08:00
elseif
e9d87975ac modified: .github/workflows/main.yml 2026-09-03 19:51:38 +08:00
elseif
82febfa6ae modified: .github/workflows/main.yml 2026-09-03 19:50:27 +08:00
elseif
4a4c226a47 modified: .github/workflows/main.yml 2026-09-03 19:49:09 +08:00
elseif
24bb59e3b1 modified: .github/workflows/main.yml 2026-09-03 19:32:00 +08:00
elseif
88f8a40223 modified: .github/workflows/main.yml 2026-09-03 19:30:26 +08:00
elseif
f20530ed8c modified: .github/workflows/main.yml 2026-09-03 19:29:40 +08:00
elseif
dd24667ef4 modified: .github/workflows/main.yml 2026-09-03 19:08:08 +08:00
elseif
66de07e0a9 modified: .github/workflows/main.yml 2026-09-03 19:00:28 +08:00
elseif
b606604720 modified: .github/workflows/main.yml 2026-09-03 18:54:55 +08:00

View File

@@ -2,7 +2,7 @@
name: Patch Mikrotik RouterOS
on:
schedule:
- cron: "00 09 * * *" # At UTC 09:00 (Beijing 17:00) on every day
- cron: "25 * * * *" # Every hour at minute 25 (UTC)
workflow_dispatch:
inputs:
version:
@@ -14,53 +14,113 @@ on:
- all
- v6
- v7
release:
description: 'Release'
required: false
default: true
type: boolean
jobs:
Patch_Stable_V7:
if: |
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch' && (github.event.inputs.version == 'all' || github.event.inputs.version == 'v7'))
uses: ./.github/workflows/patch_v7.yml
with:
channel: stable
release: true
secrets: inherit
Patch_LongTerm_V7:
if: |
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch' && (github.event.inputs.version == 'all' || github.event.inputs.version == 'v7'))
uses: ./.github/workflows/patch_v7.yml
with:
channel: long-term
release: true
secrets: inherit
Check_Versions:
runs-on: ubuntu-latest
outputs:
upgrades_v6: ${{ steps.set-matrix.outputs.upgrades_v6 }}
upgrades_v7: ${{ steps.set-matrix.outputs.upgrades_v7 }}
patch_v6: ${{ steps.set-matrix.outputs.patch_v6 }}
patch_v7: ${{ steps.set-matrix.outputs.patch_v7 }}
steps:
- name: Fetch and compare versions
id: set-matrix
run: |
OFFICIAL_UPGRADE=$(curl -s https://upgrade.mikrotik.com/routeros/upgrade.json)
echo "$OFFICIAL_UPGRADE" | jq -e . >/dev/null 2>&1 || { echo "ERROR: OFFICIAL_UPGRADE is not valid JSON" >&2; exit 1; }
Patch_Development_V7:
if: |
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch' && (github.event.inputs.version == 'all' || github.event.inputs.version == 'v7'))
uses: ./.github/workflows/patch_v7.yml
with:
channel: development
release: true
secrets: inherit
if [[ "${{ github.event_name }}" != "workflow_dispatch" ]]; then
PATCH_UPGRADE=$(curl -s https://upgrade.mikrotik.ltd/routeros/upgrade.json)
echo "$PATCH_UPGRADE" | jq -e . >/dev/null 2>&1 || { echo "ERROR: PATCH_UPGRADE is not valid JSON" >&2; exit 1; }
Patch_Stable_V6:
if: |
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch' && (github.event.inputs.version == 'all' || github.event.inputs.version == 'v6'))
CANDIDATES=$(echo "$OFFICIAL_UPGRADE" | jq -c --argjson patch "$PATCH_UPGRADE" '
($patch.upgradePaths // {}) as $paths |
.upgradePaths // {} | to_entries |
map(
.value.version as $official_version |
($paths[.key] // null) as $patch_value |
select(
$patch_value != null and
$official_version != $patch_value.version and
(any($paths[]; .version == $official_version) | not) and
((.key | test("^NEWEST6")) or (.key | test("^NEWESTa7"))) and
(.key | test("\\.(stable|development|long-term)$"))
) |
{
majorVersion: (.value.version | split(".")[0]),
channel: (.key | split(".")[1]),
version: .value.version
}
)
')
else
CANDIDATES=$(echo "$OFFICIAL_UPGRADE" | jq -c '
.upgradePaths // {} | to_entries |
map(
select(
((.key | test("^NEWEST6")) or (.key | test("^NEWESTa7")))
and
(.key | test("\\.(stable|development|long-term)$"))
)
|
{
majorVersion: (.value.version | split(".")[0]),
channel: (.key | split(".")[1]),
version: .value.version
}
)
')
fi
VERSION_FILTER="${{ inputs.version || 'all' }}"
V6_MATRIX=$(echo "$CANDIDATES" | jq -c 'map(select(.majorVersion == "6" ))')
V7_MATRIX=$(echo "$CANDIDATES" | jq -c 'map(select(.majorVersion == "7" ))')
if [[ "$VERSION_FILTER" == "v6" ]]; then
V7_MATRIX='[]'
elif [[ "$VERSION_FILTER" == "v7" ]]; then
V6_MATRIX='[]'
fi
echo "upgrades_v6=$V6_MATRIX" >> "$GITHUB_OUTPUT"
echo "upgrades_v7=$V7_MATRIX" >> "$GITHUB_OUTPUT"
echo "patch_v6=$(jq 'length > 0' <<< "$V6_MATRIX")" >> "$GITHUB_OUTPUT"
echo "patch_v7=$(jq 'length > 0' <<< "$V7_MATRIX")" >> "$GITHUB_OUTPUT"
echo "=== Upgrades V6 ==="
echo "$V6_MATRIX" | jq .
echo "=== Upgrades V7 ==="
echo "$V7_MATRIX" | jq .
Patch_V6:
needs: Check_Versions
if: ${{ needs.Check_Versions.outputs.patch_v6 == 'true' }}
uses: ./.github/workflows/patch_v6.yml
strategy:
matrix:
target: ${{ fromJson(needs.Check_Versions.outputs.upgrades_v6) }}
fail-fast: false
with:
channel: stable
release: true
channel: ${{ matrix.target.channel }}
version: ${{ matrix.target.version }}
release: ${{ github.event_name != 'workflow_dispatch' || inputs.release }}
secrets: inherit
Patch_LongTerm_V6:
if: |
(github.event_name == 'schedule') ||
(github.event_name == 'workflow_dispatch' && (github.event.inputs.version == 'all' || github.event.inputs.version == 'v6'))
uses: ./.github/workflows/patch_v6.yml
Patch_V7:
needs: Check_Versions
if: ${{ needs.Check_Versions.outputs.patch_v7 == 'true' }}
uses: ./.github/workflows/patch_v7.yml
strategy:
matrix:
target: ${{ fromJson(needs.Check_Versions.outputs.upgrades_v7) }}
fail-fast: false
with:
channel: long-term
release: true
secrets: inherit
channel: ${{ matrix.target.channel }}
version: ${{ matrix.target.version }}
release: ${{ github.event_name != 'workflow_dispatch' || inputs.release }}
secrets: inherit