Skip to content

Build mobile artifacts & deploy static content to Pages for a branded app #3

Build mobile artifacts & deploy static content to Pages for a branded app

Build mobile artifacts & deploy static content to Pages for a branded app #3

name: Build mobile artifacts & deploy static content to Pages for a branded app
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
upload_ios_to_testflight:
description: "Upload the iOS build to Testflight"
type: boolean
upload_tvos_to_testflight:
description: "Upload the tvOS build to Testflight"
type: boolean
google_play_track:
description: "Upload the app to the following Google Play track:"
type: choice
required: false
default: none
options:
- none
- internal
- alpha
- beta
- production
google_play_upload_tv:
description: "Upload the Android TV build to selected Google Play track?"
type: boolean
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "owntube-build"
cancel-in-progress: false
jobs:
choose_macos_runner:
runs-on: ubuntu-latest
environment: owntube
outputs:
runner-label: ${{ steps.set-macos-runner.outputs.runner-label }}
steps:
- name: Set macos runner
id: set-macos-runner
run: |
echo "runner-label=${{ vars.PREFERRED_MACOS_RUNNER || 'macos-latest' }}" >> $GITHUB_OUTPUT
build_info:
runs-on: ubuntu-latest
outputs:
BUILD_INFO: ${{ steps.write.outputs.BUILD_INFO }}
steps:
- id: create
name: "@${{ github.actor }} initiated GitHub Pages deployment, prepare build info"
run: |
# Builder username on GitHub
echo "GITHUB_ACTOR=${{ github.actor }}" && echo "GITHUB_ACTOR=${{ github.actor }}" >> "$GITHUB_OUTPUT"
# Create short Git SHA equivalent to `$(git rev-parse --short HEAD)` e.g. "d1f5cfd"
GITHUB_SHA_SHORT="${GITHUB_SHA::7}"
echo "GITHUB_SHA_SHORT=$GITHUB_SHA_SHORT" && echo "GITHUB_SHA_SHORT=$GITHUB_SHA_SHORT" >> "$GITHUB_OUTPUT"
# Create commit URL, e.g. "https://github.com/OwnTube-tv/web-client/commit/d1f5cfd"
COMMIT_URL="https://github.com/${{ github.repository }}/commit/$GITHUB_SHA_SHORT"
echo "COMMIT_URL=$COMMIT_URL" && echo "COMMIT_URL=$COMMIT_URL" >> "$GITHUB_OUTPUT"
# Create ISO format build timestamp in UTC, e.g. "2024-02-19T13:12:52Z"
BUILD_TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
echo "BUILD_TIMESTAMP=$BUILD_TIMESTAMP" && echo "BUILD_TIMESTAMP=$BUILD_TIMESTAMP" >> "$GITHUB_OUTPUT"
# Extract part after '/' in github.repository
REPO_NAME=$(echo "${{ github.repository }}" | awk -F/ '{print $2}')
echo "REPO_NAME=$REPO_NAME" && echo "REPO_NAME=$REPO_NAME" >> "$GITHUB_OUTPUT"
# Create web url
WEB_URL="https://${{ github.repository_owner }}.github.io/$REPO_NAME"
echo "WEB_URL=$WEB_URL" && echo "WEB_URL=$WEB_URL" >> "$GITHUB_OUTPUT"
- id: write
run: |
echo "BUILD_INFO<<EOF" >> $GITHUB_OUTPUT
echo "{
\"GITHUB_ACTOR\": \"${{ steps.create.outputs.GITHUB_ACTOR }}\",
\"GITHUB_SHA_SHORT\": \"${{ steps.create.outputs.GITHUB_SHA_SHORT }}\",
\"COMMIT_URL\": \"${{ steps.create.outputs.COMMIT_URL }}\",
\"BUILD_TIMESTAMP\": \"${{ steps.create.outputs.BUILD_TIMESTAMP }}\",
\"WEB_URL\": \"${{ steps.create.outputs.WEB_URL }}\"
}
" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
customizations_setup:
runs-on: ubuntu-latest
environment: owntube
outputs:
CUSTOMIZATIONS_ENV_CONTENT: ${{ steps.read_customization_file.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Read the customization env file
id: read_customization_file
run: |
echo "$(cat "./.customizations")"
echo 'CUSTOMIZATIONS_ENV_CONTENT<<EOF' >> $GITHUB_OUTPUT
printf "%s\n" $(cat "./.customizations") >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
deploy_web:
needs: [build_info, customizations_setup]
uses: OwnTube-tv/web-client/.github/workflows/deploy_web.yml@main
with:
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
owntube_source: OwnTube-tv/web-client
use_parent_repo_customizations: true
build_android_apk:
needs: [build_info, customizations_setup]
uses: OwnTube-tv/web-client/.github/workflows/build_android_apk.yml@main
with:
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
owntube_source: OwnTube-tv/web-client
use_parent_repo_customizations: true
build_android_tv_apk:
needs: [build_info, customizations_setup]
uses: OwnTube-tv/web-client/.github/workflows/build_android_tv_apk.yml@main
with:
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
owntube_source: OwnTube-tv/web-client
use_parent_repo_customizations: true
google_play_mobile:
needs: [build_info, customizations_setup]
uses: OwnTube-tv/web-client/.github/workflows/google_play.yml@main
if: ${{ github.event.inputs.google_play_track != 'none' }}
secrets:
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
SIGNING_KEY_ALIAS: ${{ secrets.ANDROID_SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }}
RELEASE_KEYSTORE_CONTENT_BASE64: ${{ secrets.ANDROID_RELEASE_KEYSTORE_CONTENT_BASE64 }}
SERVICE_ACCOUNT_JSON: ${{ secrets.ANDROID_SERVICE_ACCOUNT_JSON }}
with:
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
owntube_source: OwnTube-tv/web-client
track: ${{ github.event.inputs.google_play_track }}
use_parent_repo_customizations: true
google_play_tv:
needs: [build_info, customizations_setup]
uses: OwnTube-tv/web-client/.github/workflows/google_play.yml@main
if: ${{ github.event.inputs.google_play_track != 'none' && github.event.inputs.google_play_upload_tv == 'true' }}
secrets:
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
SIGNING_KEY_ALIAS: ${{ secrets.ANDROID_SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }}
RELEASE_KEYSTORE_CONTENT_BASE64: ${{ secrets.ANDROID_RELEASE_KEYSTORE_CONTENT_BASE64 }}
SERVICE_ACCOUNT_JSON: ${{ secrets.ANDROID_SERVICE_ACCOUNT_JSON }}
with:
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
owntube_source: OwnTube-tv/web-client
track: ${{ github.event.inputs.google_play_track }}
isTV: true
use_parent_repo_customizations: true
testflight_ios:
if: ${{ github.event.inputs.upload_ios_to_testflight == 'true' }}
needs: [build_info, customizations_setup, choose_macos_runner]
uses: OwnTube-tv/web-client/.github/workflows/testflight.yml@main
secrets:
BUILD_CERTIFICATE_BASE64: ${{ secrets.IOS_BUILD_CERTIFICATE_BASE64 }}
PROVISIONING_PROFILE_BASE64: ${{ secrets.IOS_BUILD_PROVISION_PROFILE_BASE64 }}
P12_PASSWORD: ${{ secrets.IOS_P12_PASSWORD}}
PROVISIONING_PROFILE_SPECIFIER: ${{ secrets.IOS_PROVISIONING_PROFILE_SPECIFIER }}
APPLE_DEVELOPMENT_TEAM: ${{ secrets.APPLE_DEVELOPMENT_TEAM }}
APPLE_API_PRIVATE_KEY: ${{ secrets.APPLE_API_PRIVATE_KEY }}
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }}
with:
target: iphoneos
runner-label: ${{ needs.choose_macos_runner.outputs.runner-label }}
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
code_sign_identity: iPhone Distribution
owntube_source: OwnTube-tv/web-client
use_parent_repo_customizations: true
testflight_tvos:
if: ${{ github.event.inputs.upload_tvos_to_testflight == 'true' }}
needs: [build_info, customizations_setup, choose_macos_runner]
uses: OwnTube-tv/web-client/.github/workflows/testflight.yml@main
secrets:
BUILD_CERTIFICATE_BASE64: ${{ secrets.TVOS_BUILD_CERTIFICATE_BASE64 }}
PROVISIONING_PROFILE_BASE64: ${{ secrets.TVOS_BUILD_PROVISION_PROFILE_BASE64 }}
P12_PASSWORD: ${{ secrets.TVOS_P12_PASSWORD}}
PROVISIONING_PROFILE_SPECIFIER: ${{ secrets.TVOS_PROVISIONING_PROFILE_SPECIFIER }}
APPLE_DEVELOPMENT_TEAM: ${{ secrets.APPLE_DEVELOPMENT_TEAM }}
APPLE_API_PRIVATE_KEY: ${{ secrets.APPLE_API_PRIVATE_KEY }}
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }}
with:
target: appletvos
runner-label: ${{ needs.choose_macos_runner.outputs.runner-label }}
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
code_sign_identity: Apple Distribution
owntube_source: OwnTube-tv/web-client
use_parent_repo_customizations: true
build_ios_simulator_app:
needs: [build_info, customizations_setup, choose_macos_runner]
uses: OwnTube-tv/web-client/.github/workflows/build_ios_simulator_app.yml@main
with:
runner-label: ${{ needs.choose_macos_runner.outputs.runner-label }}
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
owntube_source: OwnTube-tv/web-client
use_parent_repo_customizations: true
build_tvos_simulator_app:
needs: [build_info, customizations_setup, choose_macos_runner]
uses: OwnTube-tv/web-client/.github/workflows/build_tvos_simulator_app.yml@main
with:
runner-label: ${{ needs.choose_macos_runner.outputs.runner-label }}
customizations_env_content: ${{ needs.customizations_setup.outputs.CUSTOMIZATIONS_ENV_CONTENT }}
build_info: ${{ needs.build_info.outputs.BUILD_INFO }}
owntube_source: OwnTube-tv/web-client
use_parent_repo_customizations: true