Skip to content

Enable AndroidX in Gradle #22

Enable AndroidX in Gradle

Enable AndroidX in Gradle #22

Workflow file for this run

name: Build and Deploy
concurrency:
group: build-and-deploy-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches: [ main, elizaos-challenge ]
workflow_dispatch:
permissions:
contents: write
env:
DOCKER_IMAGE: ${{ secrets.DOCKER_USERNAME }}/miku
NOSANA_API_KEY: ${{ secrets.NOSANA_API_KEY }}
LLM_API_KEY: ${{ secrets.GEMINI_API_KEY }}
NOSANA_API_BASE: https://dashboard.k8s.prd.nos.ci/api
NOSANA_MARKET_FILTER: 3090
NOSANA_MARKET_TYPE: PREMIUM
jobs:
build-debug-apk:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build debug APK
working-directory: android
run: |
chmod +x gradlew
./gradlew --no-daemon --console=plain --stacktrace :app:assembleDebug
- name: Normalize APK artifact
run: |
apk_path=$(find android/app/build/outputs/apk/debug -name '*.apk' | head -n 1)
test -n "$apk_path" || {
echo "Debug APK not found";
exit 1;
}
cp "$apk_path" app-debug.apk
- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: android-debug-apk
path: app-debug.apk
build-and-deploy-agent:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
${{ env.DOCKER_IMAGE }}:latest
${{ env.DOCKER_IMAGE }}:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Validate Gemini API key
run: |
test -n "${{ env.LLM_API_KEY }}" || {
echo "GEMINI_API_KEY secret is required for deployment";
exit 1;
}
- name: Resolve market address
id: resolve-market
run: |
response=$(curl -sS \
-H "Authorization: Bearer ${{ env.NOSANA_API_KEY }}" \
"${{ env.NOSANA_API_BASE }}/markets/")
market_address=$(printf '%s' "$response" | jq -r --arg filter "${{ env.NOSANA_MARKET_FILTER }}" --arg marketType "${{ env.NOSANA_MARKET_TYPE }}" '
map(select(
(.type == $marketType)
and
(
((.name // "") | ascii_downcase | contains($filter))
or
((.gpu // "") | ascii_downcase | contains($filter))
)
))
| .[0].address // empty
')
test -n "$market_address" || {
echo "Unable to resolve Nosana ${{ env.NOSANA_MARKET_TYPE }} market address for filter: ${{ env.NOSANA_MARKET_FILTER }}"
echo "$response"
exit 1
}
echo "market_address=$market_address" >> "$GITHUB_OUTPUT"
- name: Prepare deployment payload
id: payload
run: |
tmp_job_definition=$(mktemp)
jq \
--arg image "${{ env.DOCKER_IMAGE }}:latest" \
--arg apiKey "${{ env.LLM_API_KEY }}" \
--arg baseUrl "https://generativelanguage.googleapis.com/v1beta/openai" \
--arg smallModel "gemini-2.5-flash" \
--arg largeModel "gemini-2.5-flash" \
--arg embeddingModel "gemini-embedding-001" \
--arg embeddingDimensions "1536" \
'
.ops[0].args.image = $image
| .ops[0].args.env.OPENAI_API_KEY = $apiKey
| .ops[0].args.env.OPENAI_BASE_URL = $baseUrl
| .ops[0].args.env.OPENAI_SMALL_MODEL = $smallModel
| .ops[0].args.env.OPENAI_LARGE_MODEL = $largeModel
| .ops[0].args.env.OPENAI_EMBEDDING_MODEL = $embeddingModel
| .ops[0].args.env.OPENAI_EMBEDDING_DIMENSIONS = $embeddingDimensions
' ./nos_job_def/nosana_eliza_job_definition.json > "$tmp_job_definition"
payload_file=$(mktemp)
jq -n \
--arg name "miku-${GITHUB_SHA::7}" \
--arg market "${{ steps.resolve-market.outputs.market_address }}" \
--argjson timeout 300 \
--argjson replicas 1 \
--arg strategy "SIMPLE" \
--slurpfile job "$tmp_job_definition" \
'{
name: $name,
market: $market,
timeout: $timeout,
replicas: $replicas,
strategy: $strategy,
job_definition: $job[0]
}' > "$payload_file"
echo "payload_file=$payload_file" >> "$GITHUB_OUTPUT"
- name: Create deployment
id: create-deployment
run: |
response=$(curl -sS \
-X POST \
-H "Authorization: Bearer ${{ env.NOSANA_API_KEY }}" \
-H "Content-Type: application/json" \
--data @"${{ steps.payload.outputs.payload_file }}" \
"${{ env.NOSANA_API_BASE }}/deployments/create")
deployment_id=$(printf '%s' "$response" | jq -r '.id // .deployment.id // empty')
test -n "$deployment_id" || {
echo "Failed to create deployment"
echo "$response"
exit 1
}
echo "deployment_id=$deployment_id" >> "$GITHUB_OUTPUT"
- name: Start deployment
run: |
curl -sS \
-X POST \
-H "Authorization: Bearer ${{ env.NOSANA_API_KEY }}" \
"${{ env.NOSANA_API_BASE }}/deployments/${{ steps.create-deployment.outputs.deployment_id }}/start" \
| jq .