-
Notifications
You must be signed in to change notification settings - Fork 4
187 lines (169 loc) · 9.08 KB
/
build.yml
File metadata and controls
187 lines (169 loc) · 9.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# نام ورکفلو
name: Advanced Build and Release for PeDitXOS
# تریگرها
on:
# اجرای دستی با قابلیت دیباگ از طریق SSH
workflow_dispatch:
inputs:
ssh:
description: 'SSH connection to Actions for debugging'
required: false
default: 'false'
type: 'boolean'
# اجرا در زمان پوش به شاخه main
push:
branches:
- 'main'
# --- Granting write permissions to the workflow ---
permissions:
contents: write
env:
TZ: Asia/Tehran
# نام پوشه پکیج شما
REPO_NAME: luci-app-peditxos
jobs:
# --- جاب اول: بررسی نسخه و ساخت Release ---
check_and_release:
name: Check Version and Create Release
runs-on: ubuntu-latest
outputs:
new_version_tag: ${{ steps.check_version.outputs.new_version_tag }}
upload_url: ${{ steps.create_release.outputs.upload_url }}
run_build: ${{ steps.check_version.outputs.run_build }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Check for new version
id: check_version
run: |
# خواندن نسخه از Makefile داخل پوشه پکیج
MAKEFILE_PATH="${{ env.REPO_NAME }}/Makefile"
if [ ! -f "$MAKEFILE_PATH" ]; then
echo "Makefile not found at $MAKEFILE_PATH"
exit 1
fi
# Using awk instead of cut for multi-character delimiter
PKG_VERSION=$(grep -m 1 'PKG_VERSION:=' "$MAKEFILE_PATH" | awk -F':=' '{print $2}' | xargs)
PKG_RELEASE=$(grep -m 1 'PKG_RELEASE:=' "$MAKEFILE_PATH" | awk -F':=' '{print $2}' | xargs)
CURRENT_TAG="v${PKG_VERSION}-${PKG_RELEASE}"
echo "Current version from Makefile: ${CURRENT_TAG}"
# بررسی وجود تگ در ریپازیتوری
if git rev-parse "${CURRENT_TAG}" >/dev/null 2>&1; then
echo "Tag ${CURRENT_TAG} already exists. No new build needed."
echo "run_build=false" >> $GITHUB_OUTPUT
else
echo "New version detected: ${CURRENT_TAG}. Proceeding with build."
echo "run_build=true" >> $GITHUB_OUTPUT
echo "new_version_tag=${CURRENT_TAG}" >> $GITHUB_OUTPUT
fi
- name: Create new release
id: create_release
if: steps.check_version.outputs.run_build == 'true'
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.check_version.outputs.new_version_tag }}
name: Release ${{ steps.check_version.outputs.new_version_tag }}
body: "Automated release for PeDitXOS Tools. IPK files for various architectures are attached."
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# --- جاب دوم: کامپایل پکیج برای معماریهای مختلف ---
build_package:
name: Build for ${{ matrix.arch }}
needs: check_and_release
if: needs.check_and_release.outputs.run_build == 'true'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# --- Using the exact SDK URLs for OpenWrt 24.10 ---
include:
- arch: "x86_64"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/x86/64/openwrt-sdk-24.10.0-x86-64_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "aarch64_generic"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/rockchip/armv8/openwrt-sdk-24.10.0-rockchip-armv8_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "aarch64_cortex-a53"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/mvebu/cortexa53/openwrt-sdk-24.10.0-mvebu-cortexa53_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "aarch64_cortex-a72"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/mvebu/cortexa72/openwrt-sdk-24.10.0-mvebu-cortexa72_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a5_vfpv4"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/at91/sama5/openwrt-sdk-24.10.0-at91-sama5_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a7"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/mediatek/mt7629/openwrt-sdk-24.10.0-mediatek-mt7629_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a7_neon-vfpv4"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/sunxi/cortexa7/openwrt-sdk-24.10.0-sunxi-cortexa7_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a8_vfpv3"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/sunxi/cortexa8/openwrt-sdk-24.10.0-sunxi-cortexa8_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a9"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/bcm53xx/generic/openwrt-sdk-24.10.0-bcm53xx-generic_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a9_neon"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/zynq/generic/openwrt-sdk-24.10.0-zynq-generic_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a9_vfpv3-d16"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/mvebu/cortexa9/openwrt-sdk-24.10.0-mvebu-cortexa9_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "arm_cortex-a15_neon-vfpv4"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/ipq806x/generic/openwrt-sdk-24.10.0-ipq806x-generic_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "mips_24kc"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/ath79/generic/openwrt-sdk-24.10.0-ath79-generic_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "mips_4kec"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/realtek/rtl838x/openwrt-sdk-24.10.0-realtek-rtl838x_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "mips_mips32"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/bcm53xx/generic/openwrt-sdk-24.10.0-bcm53xx-generic_gcc-13.3.0_musl_eabi.Linux-x86_64.tar.zst"
- arch: "mipsel_24kc"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/ramips/rt288x/openwrt-sdk-24.10.0-ramips-rt288x_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "mipsel_74kc"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/ramips/rt3883/openwrt-sdk-24.10.0-ramips-rt3883_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
- arch: "mipsel_mips32"
sdk_url: "https://downloads.openwrt.org/releases/24.10.0/targets/bcm47xx/generic/openwrt-sdk-24.10.0-bcm47xx-generic_gcc-13.3.0_musl.Linux-x86_64.tar.zst"
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential clang flex bison g++ gawk gcc-multilib g++-multilib \
gettext git libncurses5-dev libssl-dev python3 python3-pip rsync unzip zlib1g-dev file wget zstd
sudo apt-get -qq autoremove --purge && sudo apt-get -qq clean
# --- *** FIX: Installing Python prerequisites using pip *** ---
- name: Install Python dependencies
run: |
python3 -m pip install pyelftools
- name: Cache OpenWrt SDK
id: cache-sdk
uses: actions/cache@v4
with:
path: openwrt-sdk
key: openwrt-sdk-24.10.0-${{ matrix.arch }}
- name: Download and setup OpenWrt SDK
if: steps.cache-sdk.outputs.cache-hit != 'true'
run: |
# Handling .zst files
wget -q -O openwrt-sdk.tar.zst "${{ matrix.sdk_url }}"
mkdir -p openwrt-sdk
tar --zstd -xf openwrt-sdk.tar.zst -C openwrt-sdk --strip-components=1
- name: SSH connection for debugging
if: github.event.inputs.ssh == 'true'
uses: mxschmitt/action-tmate@v3
- name: Compile the package
id: compile
run: |
SDK_PATH=$PWD/openwrt-sdk
# کپی کردن فقط پوشه پکیج به داخل SDK
cp -r $GITHUB_WORKSPACE/$REPO_NAME $SDK_PATH/package/
cd $SDK_PATH
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make package/$REPO_NAME/compile -j$(nproc)
# پیدا کردن مسیر فایل ipk و ذخیره آن برای مرحله بعد
IPK_PATH=$(find $PWD/bin/packages -type f -name "${{ env.REPO_NAME }}*.ipk")
echo "ipk_path=${IPK_PATH}" >> $GITHUB_OUTPUT
- name: Upload IPK to the release
uses: actions/upload-release-asset@v1
with:
upload_url: ${{ needs.check_and_release.outputs.upload_url }}
asset_path: ${{ steps.compile.outputs.ipk_path }}
asset_name: ${{ env.REPO_NAME }}_${{ needs.check_and_release.outputs.new_version_tag }}_${{ matrix.arch }}.ipk
asset_content_type: application/vnd.debian.binary-package
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}