Skip to content

Crave Builder

Crave Builder #32

Workflow file for this run

name: Build ROMs Using Crave
on:
workflow_dispatch:
# Various inputs to simplify usage of workflow.
inputs:
BASE_PROJECT:
description: 'Choose a base project:'
required: true
default: 'lineage-20'
type: choice
options:
- 'lineage-20'
- 'crdroid-14'
- 'arrow-13'
- 'derp-13'
BUILD_DIFFERENT_ROM:
description: "Command to initialize a different 'repo' project:"
required: false
default: "echo 'Build Starting!'"
REMOVALS:
description: "Folders to be removed before syncing:"
default: '.repo/local_manifests'
LOCAL_MANIFEST:
description: "Personal local manifest's repository:"
required: true
default: 'https://github.com/sounddrill31/local_manifests'
LOCAL_MANIFEST_BRANCH:
description: "Personal local manifest's branch:"
required: true
default: 'lineage-oxygen'
DEVICE_NAME:
description: "Device's codename:"
required: true
default: "oxygen"
PRODUCT_NAME:
description: "Product to build:"
required: true
default: "line"
BUILD_COMMAND:
description: 'Command to be used for compiling:'
required: true
default: 'mka bacon'
BUILD_TYPE:
description: 'Type of build:'
required: true
default: 'userdebug'
type: choice
options:
- 'eng'
- 'userdebug'
- 'user'
CLEAN_BUILD:
description: 'Build Clean?'
required: true
default: 'no'
type: choice
options:
- 'yes'
- 'no'
jobs:
test:
name: Build using foss.crave.io
runs-on: ubuntu-latest
steps:
# Check-out in order to access the repository's files.
- name: Check-out to repository
uses: actions/checkout@v4
# Set-up a spearate directory for the device.
- name: Set-up wokrspace environment
run: |
mkdir ${{ github.event.inputs.DEVICE_NAME }}
cd ${{ github.event.inputs.DEVICE_NAME }}
continue-on-error: true
# [TO-DO] Drop this whenever we can.
- name: Install gh command
run: curl -sS https://webi.sh/gh | sh
# Download and configure 'repo'.
- name: Configure the 'repo' environment
run: |
mkdir "${HOME}/bin"
curl https://storage.googleapis.com/git-repo-downloads/repo >> "${HOME}/bin/repo"
chmod a+x "${HOME}/bin/repo"
sudo ln -sf "/home/${USER}/bin/repo" "/usr/bin/repo"
# Generate 'git' credential in base of the workflow's author.
- name: Set-up 'git' credential(s)
run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com"
# Initialize the previously choosen 'repo' project.
- name: Configure the 'repo' environment
run: |
case "${{ github.event.inputs.BASE_PROJECT }}" in
arrow-13)
repo init -u https://github.com/ArrowOS/android_manifest.git -b arrow-13.1 --depth=1
;;
derp-13)
repo init -u https://github.com/DerpFest-AOSP/manifest.git -b 13 --depth=1
;;
crdroid-14)
repo init -u https://github.com/crdroidandroid/android.git -b 14.0 --git-lfs --depth=1
;;
lienage-20)
repo init -u https://github.com/LineageOS/android.git -b lineage-20.0 --git-lfs --depth=1
;;
esac
id: pwd
# Download and configure 'crave'.
- name: Configure the 'crave' environment
run: |
curl -s https://raw.githubusercontent.com/accupara/crave/master/get_crave.sh | bash -s --
mv ${PWD}/crave ~/bin/
sudo ln -sf ~/bin/crave /usr/bin/crave
envsubst < crave.conf.sample >> crave.conf
rm -rf crave.conf.sample
env:
CRAVE_USERNAME: ${{ secrets.CRAVE_USERNAME }}
CRAVE_TOKEN: ${{ secrets.CRAVE_TOKEN }}
# Create a 'crave' job for building.
- name: Start compilation through 'crave'
run: |
if [ "${{ github.event.inputs.CLEAN_BUILD }}" == "yes" ]; then
export CLEAN="--clean"
else
export CLEAN=""
fi
crave run $CLEAN --no-patch -- "rm -rf ${{ github.event.inputs.REMOVALS }} && \
# Clone local_manifests repository
${{ github.event.inputs.BUILD_DIFFERENT_ROM }} ; \
git clone ${{ github.event.inputs.LOCAL_MANIFEST }} --depth 1 -b ${{ github.event.inputs.LOCAL_MANIFEST_BRANCH }} .repo/local_manifests && \
# Sync the repositories
repo sync -c -j$(nproc --all) --no-clone-bundle --no-tags --optimized-fetch --prune --force-sync && \
# Set up build environment
export BUILD_USERNAME=${{ github.actor }} ; \
export BUILD_HOSTNAME=crave ; \
source build/envsetup.sh && \
# Build the ROM
lunch ${{ github.event.inputs.PRODUCT_NAME }}-${{ github.event.inputs.BUILD_TYPE }} && \
make clean && \
${{ github.event.inputs.BUILD_COMMAND }}"
# Only reach this wheter the user killed the workflow.
- name: Execute if the job is cancelled
if: ${{ cancelled() }}
run: crave stop --all
# Pull '.zip's and '.img's from 'crave'.
- name: Retrive build artifact(s)
run: |
crave pull out/target/product/*/*.zip
crave pull out/target/product/*/*.img
# Directly upload to releases.
- name: Upload to repository's releases page
uses: softprops/action-gh-release@v1
with:
files: |
${{ github.event.inputs.DEVICE_NAME }}/recovery.img
${{ github.event.inputs.DEVICE_NAME }}/boot.img
${{ github.event.inputs.DEVICE_NAME }}/vendor_boot.img
${{ github.event.inputs.DEVICE_NAME }}/vendor.img
${{ github.event.inputs.DEVICE_NAME }}/system.img
${{ github.event.inputs.DEVICE_NAME }}/*.zip
name: ${{ github.event.inputs.PRODUCT_NAME }}-${{ github.run_id }}
tag_name: ${{ github.run_id }}
body: |
Target: ${{ github.event.inputs.PRODUCT_NAME }}-${{ github.event.inputs.BUILD_TYPE }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}