@@ -1,5 +1,13 @@
name : CI
# Required Secrets:
# - DJANGO_SECRET_KEY: Django Secret Key
# - token: Gitea API token for creating releases
# - ALIST_PUBLIC_URL: Public URL for AList download (e.g., http://alist.example.com/d/ci)
# - WEBDAV_URL: WebDAV upload URL (e.g., http://alist.example.com/dav/ci/)
# - WEBDAV_USER: WebDAV username
# - WEBDAV_PASSWORD: WebDAV password
on :
push :
branches :
@@ -18,6 +26,8 @@ jobs:
docker-ci :
if : github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && contains(github.event.head_commit.message, '[ci]'))
runs-on : ubuntu-latest
container :
image : catthehacker/ubuntu:act-latest
timeout-minutes : 40
env :
DJANGO_SECRET_KEY : ${{ secrets.DJANGO_SECRET_KEY }}
@@ -25,8 +35,8 @@ jobs:
DJANGO_ALLOWED_HOSTS : "127.0.0.1,localhost"
IMAGE_NAME : achievement_inputing_ci
ARTIFACT_DIR : artifacts
SERVER_DEST_DIR : /srv /ci
DOWNLOAD_BASE : http://139.224.69.213:8080
# 请在 Secrets 中配置 ALIST_PUBLIC_URL, 例如 http://139.224.69.213:8080/d /ci
DOWNLOAD_BASE : ${{ secrets.ALIST_PUBLIC_URL }}
GITEA_SERVER : ${{ github.server_url }}
GITEA_REPO : ${{ github.repository }}
RELEASE_TOKEN : ${{ secrets.token }}
@@ -80,12 +90,31 @@ jobs:
mkdir -p "$GITHUB_WORKSPACE/$ARTIFACT_DIR"
mv "$GITHUB_WORKSPACE/$ART" "$GITHUB_WORKSPACE/$ARTIFACT_DIR/"
echo "artifact: $GITHUB_WORKSPACE/$ARTIFACT_DIR/$ART"
- name : Publish to /srv/ci
- name : Publish to WebDAV
env :
WEBDAV_URL : ${{ secrets.WEBDAV_URL }}
WEBDAV_USER : ${{ secrets.WEBDAV_USER }}
WEBDAV_PASSWORD : ${{ secrets.WEBDAV_PASSWORD }}
run : |
set -e
ART=$(cat "$GITHUB_WORKSPACE/.artifact_name")
cat "$GITHUB_WORKSPACE/$ARTIFACT_DIR/$ART" | docker run --rm -i -v "$SERVER_DEST_DIR:/srvci" "$IMAGE_NAME:$VERSION" sh -c "cat > /srvci/$ART && ls -l /srvci"
echo "published: $SERVER_DEST_DIR/$ART"
FILE_PATH= "$GITHUB_WORKSPACE/$ARTIFACT_DIR/$ART"
# 检查必要的 secrets 是否存在
if [ -z "$WEBDAV_URL" ]; then
echo "Error: WEBDAV_URL secret is not set."
exit 1
fi
# 确保 URL 以 / 结尾
case "$WEBDAV_URL" in
*/) ;;
*) WEBDAV_URL="${WEBDAV_URL}/" ;;
esac
echo "Uploading $ART to $WEBDAV_URL..."
curl -f -u "$WEBDAV_USER:$WEBDAV_PASSWORD" -T "$FILE_PATH" "${WEBDAV_URL}${ART}"
echo "Upload success."
- name : Create release with download link
if : env.RELEASE_TOKEN != ''
run : |
@@ -94,7 +123,6 @@ jobs:
TAG="$VERSION"
NAME="$VERSION"
BASE="${DOWNLOAD_BASE%/}"
BASE="${BASE%/ci}"
DL="$BASE/$ART"
echo "download: $DL"
JSON=$(printf '{"tag_name":"%s","target_commitish":"%s","name":"%s","body":"%s"}' "$TAG" "$BRANCH" "$NAME" "$DL")