components-template/.github/workflows/build_artifacts.yml
2024-11-05 14:52:51 +09:00

120 lines
4.2 KiB
YAML

# Variables:
# - RUNNER_TAG: optional, defines on which runner the workflow will use, default ubuntu-latest
# - DYNAMIC_MANIFEST: optional, if set it will build the manifest from header.yml and module.yml files (json not yet supported)
# - MANIFEST_FILENAME: needed, the manifest name such as net.retrodeck.retrodeck.yaml
name: "Build Artifacts for RetroDECK main manifest"
on:
workflow_dispatch:
workflow_call:
inputs:
MANIFEST_FILENAME:
required: true
type: string
env:
DATE: ${{ github.run_id }}
jobs:
Building-project:
runs-on: ubuntu-latest
steps:
- name: Generate a token for Rekku
if: ${{ github.repository == 'RetroDECK/RetroDECK' }}
id: generate-rekku-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ vars.REKKU_APP_ID }}
private-key: ${{ secrets.REKKU_PRIVATE_KEY }}
repositories: "RetroDECK,Cooker"
owner: "RetroDECK"
- name: Clone repo
uses: actions/checkout@v3
with:
submodules: 'true'
- name: "Assembling manifest"
if: ${{ env.DYNAMIC_MANIFEST == 'true' }}
run: |
if [ -f "${GITHUB_WORKSPACE}/automation_tools/assemble_manifest.sh" ]; then
/bin/bash "${GITHUB_WORKSPACE}/automation_tools/assemble_manifest.sh"
else
echo "Manifest assembly script not found."
exit 1
fi
- name: "[DEBUG] Outputting manifest"
if: ${{ env.DYNAMIC_MANIFEST == 'true' }}
run: |
if [ -f "${{ env.MANIFEST_FILENAME }}" ]; then
cat "${{ env.MANIFEST_FILENAME }}"
else
echo "ERROR: manifest file not found: ${{ env.MANIFEST_FILENAME }}"
exit 1
fi
- name: "Build flatpak"
run: |
# Pull the Docker image
docker pull ghcr.io/retrodeck/retrodeck-builder:latest
# Configure Git
git config --global protocol.file.allow always
# Run the flatpak build inside the Docker container
docker run --rm \
-v "${GITHUB_WORKSPACE}:/workspace" \
-w /workspace \
ghcr.io/retrodeck/retrodeck-builder:latest \
--user --force-clean \
--install-deps-from=flathub \
--install-deps-from=flathub-beta \
--repo="/workspace/artifacts-repo" \
"/workspace/artifacts-build-dir" \
"${{ env.MANIFEST_FILENAME }}"
- name: "Exporting dir tree"
id: tree
run: |
tree -H ./ > ${GITHUB_WORKSPACE}/tree.html
echo "Directory tree exported to tree.html"
- name: "Create Artifact for RetroDECK"
run: |
tar -czf ${GITHUB_WORKSPACE}/RetroDECK-Artifact.tar.gz -C ${GITHUB_WORKSPACE}/artifacts-build-dir .
hash=($(sha256sum ${GITHUB_WORKSPACE}/RetroDECK-Artifact.tar.gz))
echo $hash > ${GITHUB_WORKSPACE}/RetroDECK-Artifact-cooker.sha
- name: Upload Artifacts
uses: actions/upload-artifact@v3
with:
name: RetroDECK-Artifacts
path: |
${GITHUB_WORKSPACE}/RetroDECK-Artifact.tar.gz
${GITHUB_WORKSPACE}/tree.html
- name: Set environment variable with current branch name
run: echo "GITHUB_REF_SLUG=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
- name: Get branch name
id: branch_name
run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV
- name: Publish the artifacts in a new release
uses: ncipollo/release-action@v1
with:
tag: "${{ github.ref_name }}-${{ github.run_id }}"
body: |
# Release Notes
These are the artifacts for RetroDECK from ${{ github.repository }}, built from commit: ${{ github.repository }}@${{ github.sha }}.
On branch [${{ github.ref_name }}](https://github.com/${{ github.repository }}/tree/${{ github.ref_name }}).
artifacts: "${GITHUB_WORKSPACE}/RetroDECK-Artifact.tar.gz, ${GITHUB_WORKSPACE}/tree.html"
allowUpdates: true
makeLatest: true
token: ${{ steps.generate-rekku-token.outputs.token || secrets.TRIGGER_BUILD_TOKEN || secrets.GITHUB_TOKEN }}