name: 'ailog Static Site Generator' description: 'AI-powered static blog generator with atproto integration' author: 'syui' branding: icon: 'book-open' color: 'orange' inputs: content-dir: description: 'Content directory containing markdown files' required: false default: 'content' output-dir: description: 'Output directory for generated site' required: false default: 'public' template-dir: description: 'Template directory' required: false default: 'templates' static-dir: description: 'Static assets directory' required: false default: 'static' config-file: description: 'Configuration file path' required: false default: 'ailog.toml' ai-integration: description: 'Enable AI features' required: false default: 'true' atproto-integration: description: 'Enable atproto/OAuth features' required: false default: 'true' outputs: site-url: description: 'Generated site URL' value: ${{ steps.generate.outputs.site-url }} build-time: description: 'Build time in seconds' value: ${{ steps.generate.outputs.build-time }} runs: using: 'composite' steps: - name: Cache ailog binary uses: actions/cache@v4 with: path: ./bin key: ailog-bin-${{ runner.os }} restore-keys: | ailog-bin-${{ runner.os }} - name: Check and update ailog binary shell: bash run: | # Get latest release version (for Gitea, adjust API endpoint if needed) if command -v curl >/dev/null 2>&1; then LATEST_VERSION=$(curl -s https://api.github.com/repos/syui/ailog/releases/latest | jq -r .tag_name 2>/dev/null || echo "v0.1.1") else LATEST_VERSION="v0.1.1" # fallback version fi echo "Target version: $LATEST_VERSION" # Check current binary version if exists mkdir -p ./bin if [ -f "./bin/ailog" ]; then CURRENT_VERSION=$(./bin/ailog --version 2>/dev/null || echo "unknown") echo "Current version: $CURRENT_VERSION" else CURRENT_VERSION="none" echo "No binary found" fi # Download if version is different or binary doesn't exist if [ "$CURRENT_VERSION" != "${LATEST_VERSION#v}" ]; then echo "Downloading ailog $LATEST_VERSION..." # Try GitHub first, then fallback to local build if curl -sL https://github.com/syui/ailog/releases/download/$LATEST_VERSION/ailog-linux-x86_64.tar.gz | tar -xzf - 2>/dev/null; then mv ailog ./bin/ailog chmod +x ./bin/ailog echo "Downloaded binary: $(./bin/ailog --version 2>/dev/null)" else echo "Download failed, building from source..." if command -v cargo >/dev/null 2>&1; then cargo build --release cp ./target/release/ailog ./bin/ailog echo "Built from source: $(./bin/ailog --version 2>/dev/null)" else echo "Error: Neither download nor cargo build available" exit 1 fi fi else echo "Binary is up to date" chmod +x ./bin/ailog fi - name: Setup Node.js for OAuth app if: ${{ inputs.atproto-integration == 'true' }} uses: actions/setup-node@v4 with: node-version: '20' - name: Build OAuth app if: ${{ inputs.atproto-integration == 'true' }} shell: bash run: | if [ -d "oauth" ]; then cd oauth npm install npm run build cp -r dist/* ../${{ inputs.static-dir }}/ fi - name: Generate site id: generate shell: bash run: | start_time=$(date +%s) ./bin/ailog build \ --content ${{ inputs.content-dir }} \ --output ${{ inputs.output-dir }} \ --templates ${{ inputs.template-dir }} \ --static ${{ inputs.static-dir }} \ --config ${{ inputs.config-file }} end_time=$(date +%s) build_time=$((end_time - start_time)) echo "build-time=${build_time}" >> $GITHUB_OUTPUT echo "site-url=file://$(pwd)/${{ inputs.output-dir }}" >> $GITHUB_OUTPUT - name: Display build summary shell: bash run: | echo "✅ ailog build completed successfully" echo "📁 Output directory: ${{ inputs.output-dir }}" echo "⏱️ Build time: ${{ steps.generate.outputs.build-time }}s" if [ -d "${{ inputs.output-dir }}" ]; then echo "📄 Generated files:" find ${{ inputs.output-dir }} -type f | head -10 fi