name: Deploy ARM to OrangePi on: workflow_run: workflows: ["Release Pipeline"] types: - completed jobs: deploy: runs-on: ubuntu-latest timeout-minutes: 15 if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: - name: Checkout Code uses: actions/checkout@v4 - name: Install Ansible run: pip3 install --quiet "ansible>=9,<11" - name: Write SSH Key run: | printf '%s\n' "${{ secrets.ANSIBLE_SSH_KEY }}" > /tmp/ansible_key chmod 600 /tmp/ansible_key - name: Write Inventory # StrictHostKeyChecking=no is intentional for a known home-network host. # To harden, add the host fingerprint as a secret and use a known_hosts file. run: | printf '[orangepi]\norangepi ansible_host=%s ansible_user=%s ansible_ssh_private_key_file=/tmp/ansible_key ansible_ssh_common_args="-o StrictHostKeyChecking=no"\n' \ "${{ secrets.ANSIBLE_HOST }}" \ "${{ secrets.ANSIBLE_USER }}" > /tmp/inventory.ini - name: Download ARM Release Artifacts run: | TAG="${{ github.event.workflow_run.head_branch }}" BASE_URL="${{ github.server_url }}/${{ github.repository }}/releases/download/${TAG}" wget --fail -q "${BASE_URL}/brainwave-arm64.tar.gz" || { echo "Failed to download ARM tarball from ${BASE_URL}"; exit 1; } wget --fail -q "${BASE_URL}/docker-compose.arm64.yml" || { echo "Failed to download docker-compose file from ${BASE_URL}"; exit 1; } - name: Deploy via Ansible env: WORKSPACE: ${{ github.workspace }} run: | ansible-playbook ansible/deploy.yml \ -i /tmp/inventory.ini \ -e "artifact_path=${WORKSPACE}" - name: Cleanup Secrets if: always() run: | rm -f /tmp/ansible_key rm -f /tmp/inventory.ini