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: Setup ailog binary shell: bash run: | # Check if pre-built binary exists if [ -f "./bin/ailog-linux-x86_64" ]; then echo "Using pre-built binary from repository" chmod +x ./bin/ailog-linux-x86_64 CURRENT_VERSION=$(./bin/ailog-linux-x86_64 --version 2>/dev/null || echo "unknown") echo "Binary version: $CURRENT_VERSION" else echo "No pre-built binary found, trying to build from source..." if command -v cargo >/dev/null 2>&1; then cargo build --release mkdir -p ./bin cp ./target/release/ailog ./bin/ailog-linux-x86_64 echo "Built from source: $(./bin/ailog-linux-x86_64 --version 2>/dev/null)" else echo "Error: No binary found and cargo not available" exit 1 fi 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) # Change to blog directory and run build # Note: ailog build only takes a path argument, not options if [ -d "my-blog" ]; then cd my-blog ../bin/ailog-linux-x86_64 build else # If no my-blog directory, use current directory ./bin/ailog-linux-x86_64 build . fi 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