Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
2664590
feat: remove china iplists, added hwid support for happ
mglants Jan 4, 2026
38d22c0
feat: update packages
mglants Jan 4, 2026
9e4656d
feat: added RU readme
mglants Jan 4, 2026
aacfb78
feat: move builds to selfhosted
mglants Jan 4, 2026
5b515b5
feat: change default config
mglants Jan 5, 2026
ac5f2e8
feat: change deploy project
mglants Jan 5, 2026
4fba06c
fix: run on
mglants Jan 5, 2026
13f474d
feat: added test build
mglants Jan 5, 2026
41aeb98
feat: v = sc
mglants Jan 5, 2026
e90c394
fix: hash
mglants Jan 5, 2026
0ceecaa
feat: fix bot
mglants Jan 5, 2026
857bef6
feat: update
mglants Jan 5, 2026
d3a7780
feat: build on mine hosts
mglants Jan 5, 2026
bec6a37
feat: really want to know why
mglants Jan 5, 2026
4c1c615
feat: update docs
mglants Jan 5, 2026
4a2dee0
feat: HWID as feauture
mglants Jan 6, 2026
0946747
feat: fork nikkix and repack
mglants Jan 9, 2026
88fa688
fix: readme, changed runners
mglants Jan 9, 2026
4356045
fix: readme
mglants Jan 9, 2026
e0cb697
feat: fix hash calculation
mglants Jan 9, 2026
5e3ff18
try: dependabot
mglants Jan 9, 2026
f68db31
fix: script location
mglants Jan 10, 2026
74c2bb9
fix: ending
mglants Jan 10, 2026
aa2c455
build: bump mihomo to v1.19.18
mglants Jan 10, 2026
26dddb6
Merge pull request #2 from mglants/dependabot
mglants Jan 10, 2026
58e916b
feat: make version really first
mglants Jan 10, 2026
4fe3da0
build: bump mihomo to v1.19.19
mglants Jan 17, 2026
b5d803e
feat: merge changes from upstream project
mglants Jan 24, 2026
cb3304b
Merge pull request #3 from mglants/dependabot
mglants Jan 24, 2026
545597c
feat: prepare for new version
mglants Jan 24, 2026
21982cc
fix: ci
mglants Jan 24, 2026
4d7da75
fix: pkg hash
mglants Jan 24, 2026
afef4db
feat: remove 23.05
mglants Feb 14, 2026
19923f6
fix: code-style
mglants Feb 14, 2026
171ca70
feat: defaults
mglants Feb 14, 2026
6ad0336
feat: get upstream changes
mglants Feb 15, 2026
e5a1424
feat: version bump
mglants Feb 15, 2026
08a45ed
fix: pkg hash
mglants Feb 15, 2026
91f5e90
fix: mixin dns semicolon
mglants Feb 25, 2026
948838d
feat: prepare release
mglants Feb 25, 2026
b5725a7
fix: mirror hash
mglants Feb 25, 2026
0e3a467
feat: support using listeners as inbound
mglants Feb 26, 2026
5a51a03
feat: merge from upstream
mglants Feb 26, 2026
29215c0
feat: merge from upstream
mglants Feb 27, 2026
ccf5220
feat: merge upstream changes
mglants Mar 4, 2026
4b2962e
feat: gather upstream changes
mglants Mar 18, 2026
f821c33
feat: update to 1.0.4
mglants Mar 18, 2026
1dcbab0
build: bump mihomo to v1.19.23
mglants Apr 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions .ci/scripts/get_PKG_MIRROR_HASH.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#!/bin/bash
# https://github.com/openwrt/openwrt/blob/main/include/download.mk

export MAKEFILE="${MAKEFILE:-Makefile}" \
&& cd "$(dirname "$MAKEFILE")" \
&& export MAKEFILE="$(basename "$MAKEFILE")"
export TOPDIR="$1"
export STAGING_DIR_HOST="${TOPDIR}/staging_dir/host"

export PATH="${STAGING_DIR_HOST}/bin:${PATH}"
MKFILE="$(sed -n '1,/^include \$(INCLUDE_DIR)\/package.mk/{s|:=|=|g;s|(|{|g;s|)|}|g;p}' "$MAKEFILE")"

set_value() {
local val="$(echo "$MKFILE" | $([ -n "$3" ] && echo sed '1!G;h;$!d' || echo cat) | sed -n "${2}p" | sed -n 's|^'"$1"'=\(.*\)|\1|p')"
eval "export $1=\"$val\""
}

set_value PKG_UPSTREAM_NAME
set_value PKG_NAME
set_value PKG_UPSTREAM_VERSION
set_value PKG_UPSTREAM_GITHASH
set_value PKG_VERSION

set_value PKG_SOURCE_URL '/^PKG_SOURCE_PROTO=git/,/^PKG_SOURCE_URL=/'
[ -n "$PKG_SOURCE_URL" ] || set_value PKG_SOURCE_URL '/^PKG_SOURCE_PROTO=git/,/^PKG_SOURCE_URL=/' 1
set_value PKG_SOURCE_VERSION
set_value PKG_SOURCE_SUBMODULES

set_value PKG_SOURCE_SUBDIR
[ -n "$PKG_SOURCE_SUBDIR" ] || export PKG_SOURCE_SUBDIR="${PKG_NAME}-${PKG_VERSION}"
set_value PKG_SOURCE '/^PKG_SOURCE_PROTO=git/,/^PKG_SOURCE=/'
[ -n "$PKG_SOURCE" ] || set_value PKG_SOURCE '/^PKG_SOURCE_PROTO=git/,/^PKG_SOURCE=/' 1
[ -n "$PKG_SOURCE" ] || export PKG_SOURCE="${PKG_SOURCE_SUBDIR}.tar.zst"



# sub-functions
# define dl_pack
dl_pack() {
case "${1##*.}" in
bz2) echo "bzip2 -c > $1";;
gz) echo "gzip -nc > $1";;
xz) echo "xz -zc -7e > $1";;
zst) echo "zstd -T0 --ultra -20 -c > $1";;
*)
>&2 echo "ERROR: Unknown pack format for file $1"
return 1
;;
esac
}

# define dl_tar_pack
dl_tar_pack() {
eval "tar --numeric-owner --owner=0 --group=0 --mode=a-s --sort=name \
\${TAR_TIMESTAMP:+--mtime=\"\$TAR_TIMESTAMP\"} -c $2 | $(dl_pack $1)"
}

# define DownloadMethod/rawgit
DownloadRawgit() {
local URL="$PKG_SOURCE_URL" \
SOURCE_VERSION="$PKG_SOURCE_VERSION" \
SUBMODULES="$PKG_SOURCE_SUBMODULES" \
FILE="$PKG_SOURCE" \
SUBDIR="$PKG_SOURCE_SUBDIR"

local OPTS="--no-checkout"

echo "Checking out files from the git repository..."
umask 022
rm -rf ${SUBDIR}
git clone ${OPTS} ${URL} ${SUBDIR}
(cd ${SUBDIR} && umask 022 && git checkout ${SOURCE_VERSION})
export TAR_TIMESTAMP=`cd ${SUBDIR} && git log -1 --format='@%ct'`

echo "Generating formal git archive (apply .gitattributes rules)"
(cd ${SUBDIR} && git config core.abbrev 8 && git archive --format=tar HEAD --output=../${SUBDIR}.tar.git)
grep -q '\bskip\b' <<< "${SUBMODULES}" || tar --ignore-failed-read -C ${SUBDIR} -f ${SUBDIR}.tar.git -r .git .gitmodules 2>/dev/null

rm -rf ${SUBDIR} && mkdir ${SUBDIR}
tar -C ${SUBDIR} -xf ${SUBDIR}.tar.git
(cd ${SUBDIR} && { grep -q '\bskip\b' <<< "${SUBMODULES}" || git submodule update --init --recursive -- ${SUBMODULES} && rm -rf .git .gitmodules; })

echo "Packing checkout..."
dl_tar_pack ${FILE} ${SUBDIR}
echo "MIRROR_HASH: $(sha256sum ${FILE})"
rm -rf ${SUBDIR}.tar.git ${SUBDIR} ${FILE}
}

# Main
DownloadRawgit
echo -ne "Press any key to continue..."
read -n 1 -s -r -t 60 || true
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ blank_issues_enabled: false
contact_links:
- name: Wiki / 文档
about: Check it before start a new issue
url: https://github.com/nikkinikki-org/OpenWrt-nikki/wiki
url: https://github.com/mglants/nikkix/wiki
- name: FAQ / 常见问题
about: Check it before start a new issue
url: https://github.com/nikkinikki-org/OpenWrt-nikki/wiki/FAQ
url: https://github.com/mglants/nikkix/wiki/FAQ
- name: Changelog / 更新日志
about: Check it before start a new issue
url: https://github.com/nikkinikki-org/OpenWrt-nikki/wiki/Changelog
url: https://github.com/mglants/nikkix/wiki/Changelog
- name: How To Ask Questions The Smart Way / 提问的智慧
about: Read it before start a new issue
url: http://www.catb.org/~esr/faqs/smart-questions.html
13 changes: 5 additions & 8 deletions .github/workflows/build-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
jobs:
build:
name: ${{ matrix.arch }}-${{ matrix.branch }} build
runs-on: ubuntu-latest
runs-on: arc-runner-set-nikkix
strategy:
fail-fast: false
matrix:
Expand All @@ -33,13 +33,10 @@ jobs:
- i386_pentium4
- x86_64
branch:
- openwrt-23.05
- openwrt-24.10
- openwrt-25.12
- SNAPSHOT
exclude:
- arch: aarch64_cortex-a76
branch: openwrt-23.05
- arch: mips_4kec
branch: openwrt-25.12
- arch: mips_4kec
Expand All @@ -53,12 +50,12 @@ jobs:
uses: openwrt/gh-action-sdk@main
env:
ARCH: ${{ matrix.arch }}-${{ matrix.branch }}
FEEDNAME: nikki
PACKAGES: luci-app-nikki
FEEDNAME: nikkix
PACKAGES: luci-app-nikkix
NO_REFRESH_CHECK: true

- name: upload
uses: actions/upload-artifact@v4
with:
name: nikki_${{ matrix.arch }}-${{ matrix.branch }}
path: bin/packages/${{ matrix.arch }}/nikki
name: nikkix_${{ matrix.arch }}-${{ matrix.branch }}
path: bin/packages/${{ matrix.arch }}/nikkix
88 changes: 54 additions & 34 deletions .github/workflows/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,74 +11,94 @@ jobs:
outputs:
pkg_source_version: ${{ steps.info.outputs.pkg_source_version }}
pkg_mirror_hash: ${{ steps.info.outputs.pkg_mirror_hash }}
pkg_build_version: ${{ steps.info.outputs.pkg_build_version }}
steps:
- id: checkout
name: checkout
uses: actions/checkout@v4
with:
repository: nikkinikki-org/OpenWrt-nikki
repository: mglants/nikkix
ref: main
path: OpenWrt-nikki
path: nikkix
- id: info
name: info
run: |
echo "pkg_source_version=$(grep "PKG_SOURCE_VERSION:=" OpenWrt-nikki/nikki/Makefile | cut -d '=' -f 2)" >> $GITHUB_OUTPUT
echo "pkg_mirror_hash=$(grep "PKG_MIRROR_HASH:=" OpenWrt-nikki/nikki/Makefile | cut -d '=' -f 2)" >> $GITHUB_OUTPUT
echo "pkg_build_version=$(grep "PKG_BUILD_VERSION:=" OpenWrt-nikki/nikki/Makefile | cut -d '=' -f 2)" >> $GITHUB_OUTPUT
echo "pkg_source_version=$(grep "PKG_SOURCE_VERSION:=" nikkix/nikkix/Makefile | cut -d '=' -f 2)" >> $GITHUB_OUTPUT
echo "pkg_mirror_hash=$(grep "PKG_MIRROR_HASH:=" nikkix/nikkix/Makefile | cut -d '=' -f 2)" >> $GITHUB_OUTPUT
get_latest_info:
runs-on: ubuntu-latest
outputs:
commit_date: ${{ steps.info.outputs.commit_date }}
commit_sha: ${{ steps.info.outputs.commit_sha }}
short_commit_sha: ${{ steps.info.outputs.short_commit_sha }}
checksum: ${{ steps.info.outputs.checksum }}
pkg_target_version: ${{ steps.info.outputs.pkg_target_version }}
steps:
- id: checkout
name: checkout
- name: checkout
uses: actions/checkout@v4
with:
repository: 'MetaCubeX/mihomo'
ref: 'Alpha'
path: 'mihomo'
repository: MetaCubeX/mihomo
fetch-depth: 0
path: mihomo

- id: info
name: info
shell: bash
run: |
echo "commit_date=$(git -C mihomo log -n 1 --format=%cs)" >> $GITHUB_OUTPUT
echo "commit_sha=$(git -C mihomo rev-parse HEAD)" >> $GITHUB_OUTPUT
echo "short_commit_sha=$(git -C mihomo rev-parse --short HEAD)" >> $GITHUB_OUTPUT
git -C mihomo config tar.xz.command "xz -c"
git -C mihomo archive --output=mihomo.tar.xz HEAD
echo "checksum=$(sha256sum mihomo/mihomo.tar.xz | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT
set -euo pipefail

git -C mihomo fetch --tags --force

# последний semver-тег
latest_tag="$(
git -C mihomo tag -l 'v[0-9]*' | sort -V | tail -n 1
)"

echo "pkg_target_version=$latest_tag" >> "$GITHUB_OUTPUT"


update:
needs:
- get_current_info
- get_latest_info
if: ${{ needs.get_current_info.outputs.pkg_source_version != needs.get_latest_info.outputs.commit_sha }}
if: ${{ needs.get_current_info.outputs.pkg_source_version != needs.get_latest_info.outputs.pkg_target_version }}
runs-on: ubuntu-latest
steps:
- id: checkout
name: checkout
uses: actions/checkout@v4
with:
repository: nikkinikki-org/OpenWrt-nikki
repository: mglants/nikkix
ref: main
path: OpenWrt-nikki
path: nikkix
- id: update
name: update
run: |
sed -i "s/PKG_RELEASE:=.*/PKG_RELEASE:=1/" OpenWrt-nikki/nikki/Makefile
sed -i "s/PKG_SOURCE_DATE:=.*/PKG_SOURCE_DATE:=${{ needs.get_latest_info.outputs.commit_date }}/" OpenWrt-nikki/nikki/Makefile
sed -i "s/PKG_SOURCE_VERSION:=.*/PKG_SOURCE_VERSION:=${{ needs.get_latest_info.outputs.commit_sha }}/" OpenWrt-nikki/nikki/Makefile
sed -i "s/PKG_MIRROR_HASH:=.*/PKG_MIRROR_HASH:=${{ needs.get_latest_info.outputs.checksum }}/" OpenWrt-nikki/nikki/Makefile
sed -i "s/PKG_BUILD_VERSION:=.*/PKG_BUILD_VERSION:=alpha-${{ needs.get_latest_info.outputs.short_commit_sha }}/" OpenWrt-nikki/nikki/Makefile
sed -i "s/PKG_RELEASE:=.*/PKG_RELEASE:=1/" nikkix/nikkix/Makefile
sed -i "s/PKG_SOURCE_VERSION:=.*/PKG_SOURCE_VERSION:=${{ needs.get_latest_info.outputs.pkg_target_version }}/" nikkix/nikkix/Makefile
sed -i "s/PKG_MIRROR_HASH:=.*/PKG_MIRROR_HASH:=${{ needs.get_latest_info.outputs.checksum }}/" nikkix/nikkix/Makefile
- name: Calculate PKG_MIRROR_HASH
id: hash_cals
shell: bash
env:
MAKEFILE: nikkix/nikkix/Makefile
run: |
pkg_mirror_hash=$(nikkix/.ci/scripts/get_PKG_MIRROR_HASH.sh | grep '^MIRROR_HASH: ' | awk '{print $2}')
echo "PKG_MIRROR_HASH=$pkg_mirror_hash"
sed -i "s|^\(PKG_MIRROR_HASH\b.*\)=.*|\1=$pkg_mirror_hash|" "$MAKEFILE"
old_ver=$(sed -n 's/^PKG_VERSION:=//p' "$MAKEFILE")
new_ver=$(awk -F. 'BEGIN{OFS="."}
{
$3 = $3 + 1
print
}' <<< "$old_ver")
sed -i "s/^PKG_VERSION:=.*/PKG_VERSION:=$new_ver/" "$MAKEFILE"
- id: pr
name: pr
uses: peter-evans/create-pull-request@v6
with:
path: OpenWrt-nikki
path: nikkix
branch: dependabot
commit-message: "build: update mihomo to ${{ needs.get_latest_info.outputs.short_commit_sha }}"
title: "build: update mihomo to ${{ needs.get_latest_info.outputs.short_commit_sha }}"
commit-message: "build: bump mihomo to ${{ needs.get_latest_info.outputs.pkg_target_version }}"
title: "build: bump mihomo to ${{ needs.get_latest_info.outputs.pkg_target_version }}"
body: |
[Changelog](https://github.com/metacubex/mihomo/compare/${{ needs.get_current_info.outputs.pkg_source_version }}...${{ needs.get_latest_info.outputs.commit_sha }})
Stable release update

**mihomo:** `${{ needs.get_latest_info.outputs.pkg_target_version }}`

🔗 Changelog:
https://github.com/MetaCubeX/mihomo/compare/${{ needs.get_current_info.outputs.pkg_source_version }}...${{ needs.get_latest_info.outputs.pkg_target_version }}
35 changes: 16 additions & 19 deletions .github/workflows/release-packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
jobs:
release:
name: ${{ matrix.arch }}-${{ matrix.branch }} release
runs-on: ubuntu-latest
runs-on: arc-runner-set-nikkix
continue-on-error: true
strategy:
fail-fast: false
Expand Down Expand Up @@ -37,13 +37,10 @@ jobs:
- i386_pentium4
- x86_64
branch:
- openwrt-23.05
- openwrt-24.10
- openwrt-25.12
- SNAPSHOT
exclude:
- arch: aarch64_cortex-a76
branch: openwrt-23.05
- arch: mips_4kec
branch: openwrt-25.12
- arch: mips_4kec
Expand All @@ -57,32 +54,32 @@ jobs:
uses: openwrt/gh-action-sdk@main
env:
ARCH: ${{ matrix.arch }}-${{ matrix.branch }}
FEEDNAME: nikki
PACKAGES: luci-app-nikki
FEEDNAME: nikkix
PACKAGES: luci-app-nikkix
INDEX: 1
KEY_BUILD: ${{ secrets.KEY_BUILD }}
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
NO_REFRESH_CHECK: true

V: sc
- name: compress
run: |
tar -c -z -f nikki_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz -C bin/packages/${{ matrix.arch }}/nikki .
tar -c -z -f nikkix_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz -C bin/packages/${{ matrix.arch }}/nikkix .
mkdir -p public/${{ matrix.branch }}/${{ matrix.arch }}
mv bin/packages/${{ matrix.arch }}/nikki public/${{ matrix.branch }}/${{ matrix.arch }}
tar -c -z -f feed_nikki_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz public/${{ matrix.branch }}/${{ matrix.arch }}
mv bin/packages/${{ matrix.arch }}/nikkix public/${{ matrix.branch }}/${{ matrix.arch }}
tar -c -z -f feed_nikkix_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz public/${{ matrix.branch }}/${{ matrix.arch }}

- if: github.event_name == 'push' && startsWith(github.ref_name, 'v')
name: release
uses: softprops/action-gh-release@v2
with:
files: |
nikki_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz
nikkix_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz

- name: upload
uses: actions/upload-artifact@v4
with:
name: feed_nikki_${{ matrix.arch }}-${{ matrix.branch }}
path: feed_nikki_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz
name: feed_nikkix_${{ matrix.arch }}-${{ matrix.branch }}
path: feed_nikkix_${{ matrix.arch }}-${{ matrix.branch }}.tar.gz

feed:
needs: release
Expand All @@ -93,23 +90,23 @@ jobs:
- name: download
uses: actions/download-artifact@v4
with:
pattern: feed_nikki_*
pattern: feed_nikkix_*
merge-multiple: true

- name: uncompress
run: |
for file in feed_nikki_*.tar.gz; do tar -x -z -f "$file"; done
for file in feed_nikkix_*.tar.gz; do tar -x -z -f "$file"; done

- name: prepare
run: |
echo "${{ secrets.KEY_BUILD_PUB }}" > public/key-build.pub
echo "${{ secrets.PUBLIC_KEY }}" > public/public-key.pem
tree --dirsfirst --sort name -P '*.apk|*.ipk' --prune --noreport -H "" -T "Nikki's Feed" --charset utf-8 -o public/index.html public
tree --dirsfirst --sort name -P '*.apk|*.ipk' --prune --noreport -H "" -T "Nikkix's Feed" --charset utf-8 -o public/index.html public
sed -i '/<p class="VERSION">/,/<\/p>/d' public/index.html

- name: feed
uses: cloudflare/wrangler-action@v3
with:
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: pages deploy public --project-name=nikkinikki
command: pages deploy public --project-name=glantswrt
Loading