Add workflows #1
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: build_amazon_linux_image | |
| env: | |
| version: ${{ github.ref_name }} | |
| on: | |
| push: | |
| tags: | |
| - '*' | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: [self-hosted, Linux, kvm] | |
| container: | |
| image: ghcr.io/net-architect-cloud/docker-libguestfs-tools:latest | |
| options: --device=/dev/kvm --volume /tmp:/shared | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download Amazon Linux 2 base image | |
| run: | | |
| wget "https://cdn.amazonlinux.com/os-images/${{ env.version }}/kvm/amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2" -O base-os.qcow2 | |
| - name: Modify Amazon Linux 2 base image | |
| run: | | |
| virt-copy-in -a base-os.qcow2 config/cloud.cfg /etc/cloud/ | |
| - name: Sysprep & Sparsify image | |
| run: | | |
| virt-sysprep -a base-os.qcow2 | |
| virt-sparsify --convert qcow2 --compress base-os.qcow2 amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 | |
| { | |
| echo "# Amazon Linux 2 ${{ env.version }} checksums" | |
| echo "# Generated on: $(date)" | |
| echo "" | |
| echo "## MD5" | |
| md5sum amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 | |
| echo "" | |
| echo "## SHA1" | |
| sha1sum amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 | |
| echo "" | |
| echo "## SHA256" | |
| sha256sum amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 | |
| } > checksums.txt | |
| # Extract individual checksums for backward compatibility | |
| md5sum amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 > md5.txt | |
| sha1sum amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 > sha1.txt | |
| sha256sum amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 > sha256.txt | |
| # Copy files to shared volume for artifact upload | |
| cp amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 /shared/ | |
| cp checksums.txt /shared/ | |
| cp md5.txt /shared/ | |
| cp sha1.txt /shared/ | |
| cp sha256.txt /shared/ | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: amazon-linux-image | |
| path: | | |
| amzn2-kvm-${{ env.version }}-x86_64.xfs.gpt.qcow2 | |
| checksums.txt | |
| md5.txt | |
| sha1.txt | |
| sha256.txt | |
| deploy: | |
| needs: build | |
| runs-on: [self-hosted, Linux, kvm] | |
| container: | |
| image: ghcr.io/net-architect-cloud/docker-scp-gateway:latest | |
| options: --user root | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Create directory structure | |
| run: | | |
| mkdir -p deploy/${{ env.version }} | |
| find artifacts -name "*.qcow2" -exec cp {} deploy/${{ env.version }}/ \; | |
| find artifacts -name "*.txt" -exec cp {} deploy/${{ env.version }}/ \; | |
| echo "Amazon Linux 2 Images - Version ${{ env.version }}" > deploy/${{ env.version }}/README.txt | |
| echo "Generated on: $(date)" >> deploy/${{ env.version }}/README.txt | |
| echo "" >> deploy/${{ env.version }}/README.txt | |
| echo "Available files:" >> deploy/${{ env.version }}/README.txt | |
| ls -la deploy/${{ env.version }}/ >> deploy/${{ env.version }}/README.txt | |
| - name: Deploy to SFTP server | |
| run: | | |
| mkdir -p ~/.ssh | |
| printf '%s\n' "${{ secrets.SFTP_PRIVATE_KEY }}" > ~/.ssh/deploy_key | |
| chmod 600 ~/.ssh/deploy_key | |
| ls -la ~/.ssh/deploy_key | |
| KEY_PATH="/github/home/.ssh/deploy_key" | |
| SSH_OPTS="-i $KEY_PATH -p ${{ secrets.SFTP_PORT || 22 }} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR" | |
| SSH_CMD="ssh $SSH_OPTS ${{ secrets.SFTP_USERNAME }}@${{ secrets.SFTP_HOST }}" | |
| REPO_NAME="${{ github.event.repository.name }}" | |
| REMOTE_PATH="public_html/repo.openimages.cloud/$REPO_NAME" | |
| echo "SSH connection test with key: $KEY_PATH" | |
| $SSH_CMD "echo 'SSH connection successful'" | |
| $SSH_CMD "mkdir -p $REMOTE_PATH/${{ env.version }}" | |
| rsync -avz -e "ssh $SSH_OPTS" \ | |
| deploy/${{ env.version }}/ ${{ secrets.SFTP_USERNAME }}@${{ secrets.SFTP_HOST }}:$REMOTE_PATH/${{ env.version }}/ | |
| $SSH_CMD "rm -f $REMOTE_PATH/latest" | |
| $SSH_CMD "ln -sf ${{ env.version }} $REMOTE_PATH/latest" | |
| echo "Verification of 'latest' symbolic link:" | |
| $SSH_CMD "ls -la $REMOTE_PATH/latest" | |
| echo "✅ Deployment completed successfully!" | |
| echo "" | |
| echo "📦 Amazon Linux 2 images available at the following URLs:" | |
| echo " - Version ${{ env.version }} : https://repo.openimages.cloud/$REPO_NAME/${{ env.version }}/" | |
| echo " - Latest version : https://repo.openimages.cloud/$REPO_NAME/latest/" |