Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
e8db229
feat: Cross-platform build support for Makefile and GitHub Actions
dreamcoin1998 Feb 14, 2025
052bc1d
fix: optimize rsync upload command in package workflow
dreamcoin1998 Feb 14, 2025
eca42f4
fix: enhance rsync upload with temporary directory and permissions
dreamcoin1998 Feb 14, 2025
e6d4135
fix: handle rsync upload errors with graceful exit strategy
dreamcoin1998 Feb 14, 2025
2cacbdd
fix: modify rsync upload error handling to always exit successfully
dreamcoin1998 Feb 14, 2025
aa53196
refactor: simplify rsync upload command in package workflow
dreamcoin1998 Feb 14, 2025
1258b58
refactor: Enhance cross-platform build and deployment configuration
dreamcoin1998 Feb 14, 2025
6d5d805
feat: Improve Windows checksum generation in package workflow
dreamcoin1998 Feb 14, 2025
5cbc580
fix: Improve Windows-specific clean command in Makefile
dreamcoin1998 Feb 14, 2025
79a6f78
fix: Update rsync upload command with remote host protocol prefix
dreamcoin1998 Feb 14, 2025
2635cc3
feat: Enhance cross-platform checksum generation in package workflow
dreamcoin1998 Feb 14, 2025
a22e423
feat: Add cross-platform rsync deployment support for package workflow
dreamcoin1998 Feb 14, 2025
fd3c571
feat: Dynamically generate version from git tags in Makefile
dreamcoin1998 Feb 14, 2025
961e00d
chore: Update GitHub Actions checkout to fetch full git history
dreamcoin1998 Feb 14, 2025
bde8666
feat: Improve version extraction in GitHub Actions package workflow
dreamcoin1998 Feb 14, 2025
80d25d8
refactor: Optimize version extraction in GitHub Actions workflow
dreamcoin1998 Feb 14, 2025
f3b7bf2
fix: Improve macOS checksum generation in package workflow
dreamcoin1998 Feb 14, 2025
749c816
fix: Refactor version extraction in Makefile and GitHub Actions workflow
dreamcoin1998 Feb 14, 2025
efbc821
fix: Refine version extraction for Windows in Makefile and GitHub Act…
dreamcoin1998 Feb 14, 2025
d7e026a
refactor: Centralize version extraction in GitHub Actions workflow
dreamcoin1998 Feb 14, 2025
afa0b80
fix: Correct version variable usage in rsync deployment step
dreamcoin1998 Feb 14, 2025
ff7ee9e
fix: Correct macOS runner condition in package workflow
dreamcoin1998 Feb 14, 2025
15562cc
chore: Update GitHub Actions workflow runner to Ubuntu 20.04
dreamcoin1998 Feb 17, 2025
fac2808
chore: Enhance build matrix and platform configuration
dreamcoin1998 Feb 19, 2025
99b36d0
chore: Improve package workflow for CentOS 7 and checksum generation
dreamcoin1998 Feb 19, 2025
3cfe70a
chore: Upgrade Python installation for CentOS 7 build environment
dreamcoin1998 Feb 19, 2025
45a80dc
chore: Simplify Python installation for CentOS 7 build environment
dreamcoin1998 Feb 19, 2025
24e70bf
chore: Replace SCL Python with manual Python 3.8.12 installation in C…
dreamcoin1998 Feb 19, 2025
dae97ac
chore: Enhance Python 3.8.12 installation with SQLite support in Cent…
dreamcoin1998 Feb 19, 2025
45e6142
chore: Improve Python 3.8.12 installation with shared library support
dreamcoin1998 Feb 19, 2025
2942773
chore: Enhance package workflow with automated checksum generation
dreamcoin1998 Feb 19, 2025
f64afaa
chore: Add urllib3 version constraint in package workflow
dreamcoin1998 Feb 19, 2025
70032e9
chore: Add CentOS 7 build target in Makefile and simplify GitHub Acti…
dreamcoin1998 Feb 19, 2025
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
214 changes: 95 additions & 119 deletions .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,161 +7,137 @@ on:
workflow_dispatch: # 允许手动触发

jobs:
# 获取版本号
get-version:
runs-on: ubuntu-20.04
outputs:
version: ${{ steps.get_version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Get version
id: get_version
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/v}
else
VERSION=$(git describe --tags | grep -o '^v[0-9]\+\.[0-9]\+\.[0-9]\+' | sed 's/^v//' || echo '0.0.0')
fi
echo "version=$VERSION" >> $GITHUB_OUTPUT

# 二进制文件构建任务
build-binaries:
build-and-publish:
needs: get-version
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
platform: linux
- os: ubuntu-20.04
platform: ubuntu
arch: x86_64
- os: ubuntu-22.04
platform: centos
arch: x86_64
ext: ""
is_centos7: true
- os: macos-latest
platform: darwin
arch: x86_64
ext: ""
- os: windows-latest
platform: windows
arch: x86_64

runs-on: ${{ matrix.os }}

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
architecture: x64

- name: Extract version from tag
id: get_version
- name: Install make (Windows)
if: runner.os == 'Windows'
run: |
choco install make

- name: Build binary
shell: bash
env:
PYTHONPATH: ${{ github.workspace }}
VERSION: ${{ needs.get-version.outputs.version }}
PLATFORM: ${{ matrix.platform }}
ARCH: ${{ matrix.arch }}
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
if [ "${{ matrix.is_centos7 }}" = "true" ]; then
make centos7 VERSION=$VERSION
else
echo "VERSION=latest" >> $GITHUB_ENV
make clean setup current VERSION=$VERSION
fi

- name: Install dependencies
- name: Generate checksum (Linux)
if: runner.os == 'Linux' && !matrix.is_centos7
shell: bash
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pyinstaller

- name: Create config directory (Unix)
run: mkdir -p ~/.tapflow
cd dist
sha256sum * > SHA256SUMS.${{ matrix.platform }}.txt

- name: Build binary
- name: Generate checksum (macOS)
if: runner.os == 'macOS'
shell: bash
run: |
python -m PyInstaller \
--clean \
--name tapflow-${{ env.VERSION }}-${{ matrix.platform }}-${{ matrix.arch }} \
--add-data "requirements.txt:." \
--add-data "README.md:." \
--add-data "tapflow/cli/cli.py:tapflow/cli" \
--add-data "etc:etc" \
--add-data "tapflow:tapflow" \
--hidden-import tapflow \
--hidden-import tapflow.cli \
--hidden-import tapflow.cli.cli \
--hidden-import tapflow.cli.tap \
--hidden-import tapflow.lib \
--hidden-import tapflow.lib.configuration \
--hidden-import tapflow.lib.configuration.config \
--hidden-import tapflow.lib.backend_apis \
--hidden-import tapflow.lib.data_pipeline \
--hidden-import tapflow.lib.connections \
--hidden-import tapflow.lib.utils \
--hidden-import tapflow.lib.params \
--hidden-import tapflow.lib.data_pipeline.validation \
--hidden-import tapflow.lib.data_services \
--hidden-import tapflow.lib.system \
--hidden-import tapflow.lib.cache \
--hidden-import tapflow.lib.backend_apis.common \
--hidden-import tapflow.lib.backend_apis.connections \
--hidden-import tapflow.lib.backend_apis.task \
--hidden-import tapflow.lib.backend_apis.dataVerify \
--hidden-import tapflow.lib.backend_apis.metadataInstance \
--hidden-import tapflow.lib.backend_apis.apiServers \
--hidden-import IPython \
--hidden-import yaml \
--hidden-import requests \
--hidden-import websockets \
--hidden-import bson \
--hidden-import urllib \
--hidden-import traitlets \
--hidden-import importlib.metadata \
--hidden-import logging \
--hidden-import email \
--hidden-import xml \
--hidden-import http \
--hidden-import ctypes \
--hidden-import multiprocessing \
--hidden-import dateutil \
--hidden-import json \
--hidden-import asyncio \
--hidden-import concurrent.futures \
--hidden-import idna \
--hidden-import urllib3 \
--hidden-import charset_normalizer \
--log-level ERROR \
--onefile \
tapflow/cli/tap.py

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.platform }}-${{ matrix.arch }}
path: dist/*${{ matrix.ext }}
retention-days: 1
cd dist
for file in *; do
if [ -f "$file" ] && [ "$file" != "SHA256SUMS.darwin.txt" ]; then
shasum -a 256 "$file" >> SHA256SUMS.darwin.txt
fi
done

# 发布二进制文件到服务器任务
publish-binaries:
needs: [build-binaries]
runs-on: ubuntu-latest

steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- name: Generate checksum (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
cd dist
Get-ChildItem -File | ForEach-Object {
$hash = (Get-FileHash -Algorithm SHA256 $_.Name).Hash.ToLower()
"$hash $($_.Name)" | Out-File -Append -Encoding utf8 SHA256SUMS.windows.txt
}

- name: Install rsync
run: sudo apt-get install -y rsync
- name: Fix line endings (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
cd dist
(Get-Content SHA256SUMS.windows.txt) | Set-Content -Encoding utf8 SHA256SUMS.windows.txt

- name: Get version from tag
id: get_version
- name: Install rsync (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
else
echo "VERSION=latest" >> $GITHUB_OUTPUT
fi
choco install rsync

- name: Prepare artifacts for upload
- name: Deploy to rsync server (Unix)
if: runner.os != 'Windows'
shell: bash
env:
VERSION: ${{ needs.get-version.outputs.version }}
run: |
mkdir -p upload
# 显示当前目录结构以便调试
echo "Current directory structure:"
ls -R dist/
# 直接复制 dist 目录下的所有文件
cp -r dist/*/* upload/ || cp -r dist/* upload/
cd upload
# 确保目录不为空再生成校验和
if [ "$(ls -A)" ]; then
sha256sum * > SHA256SUMS.txt
else
echo "Error: No files found to generate checksums"
exit 1
fi
echo '${{ secrets.RSYNC_PASSWORD }}' > /tmp/rsync.passwd && chmod 600 /tmp/rsync.passwd
rsync --password-file=/tmp/rsync.passwd -vzrt --progress dist/ "rsync://${{ secrets.RSYNC_USER }}@${{ secrets.RSYNC_HOST }}/data/enterprise-artifact/gz/tapflow/$VERSION/" || true

- name: Upload to server via rsync
- name: Deploy to rsync server (Windows)
if: runner.os == 'Windows'
shell: pwsh
env:
VERSION: ${{ needs.get-version.outputs.version }}
RSYNC_PASSWORD: ${{ secrets.RSYNC_PASSWORD }}
RSYNC_HOST: ${{ secrets.RSYNC_HOST }}
VERSION: ${{ steps.get_version.outputs.VERSION }}
run: |
echo "${{ env.RSYNC_PASSWORD }}" > /tmp/rsync_password && chmod 600 /tmp/rsync_password
rsync --password-file=/tmp/rsync_password -avz --progress upload/ "rsync://${RSYNC_HOST}/data/enterprise-artifact/gz/tapflow/${VERSION}/"
$env:RSYNC_PASSWORD | Out-File -FilePath "$env:TEMP\rsync.passwd" -Encoding ASCII
rsync --password-file="$env:TEMP\rsync.passwd" -vzrt --progress dist/ "rsync://${{ secrets.RSYNC_USER }}@${{ secrets.RSYNC_HOST }}/data/enterprise-artifact/gz/tapflow/${{ env.VERSION }}/" || exit 0
Loading
Loading