Skip to content

Publish releases

Publish releases #2506

Workflow file for this run

name: Publish releases
on:
# Triggers the workflow on push when pushing to a version tag
push:
tags:
- "*lantern-*"
workflow_dispatch:
permissions:
contents: "read"
id-token: "write"
env:
GOPRIVATE: github.com/getlantern
S3_BUCKET: lantern
jobs:
determine-platform:
runs-on: ubuntu-latest
outputs:
platform: ${{ steps.set-platform.outputs.platform }}
steps:
- name: Determine Platform
id: set-platform
run: |
echo "GITHUB_REF is: $GITHUB_REF"
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
TAG=${GITHUB_REF#refs/tags/}
echo "Tag is: $TAG"
if [[ $TAG == ios-* ]]; then
echo "Platform determined: ios"
echo "platform=ios" >> "$GITHUB_OUTPUT"
elif [[ $TAG == android-* ]]; then
echo "Platform determined: android"
echo "platform=android" >> "$GITHUB_OUTPUT"
elif [[ $TAG == desktop-* ]]; then
echo "Platform determined: desktop"
echo "platform=desktop" >> "$GITHUB_OUTPUT"
else
echo "Platform determined: all (tag did not match specific platforms)"
echo "platform=all" >> "$GITHUB_OUTPUT"
fi
else
echo "Not a tag reference, defaulting to all platforms"
echo "platform=all" >> "$GITHUB_OUTPUT"
fi
set-version:
needs: determine-platform
runs-on: ubuntu-latest
outputs:
version: ${{ steps.set-version.outputs.version }}
prefix: ${{ steps.set-version.outputs.prefix }}
version_file: ${{ steps.set-version.outputs.version_file }}
steps:
- id: set-version
shell: python
run: |
import sys, os
ref = os.environ.get("GITHUB_REF","")
if "refs/tags" in ref:
tag = ref.strip()
if tag.startswith('refs/tags/android-lantern-'):
a = tag.replace('refs/tags/android-lantern-', '')
elif tag.startswith('refs/tags/ios-lantern-'):
a = tag.replace('refs/tags/ios-lantern-', '')
elif tag.startswith('refs/tags/desktop-lantern-'):
a = tag.replace('refs/tags/desktop-lantern-', '')
else:
a = tag.replace('refs/tags/lantern-', '')
parts = a.split('-', 1)
suffix = parts[1] if len(parts) > 1 else ''
beta = 'beta' in suffix
internal = 'internal' in suffix
if beta:
li = 'lantern-installer-preview'
vf = 'version-android-beta.txt'
version = parts[0]
elif internal:
li = 'lantern-installer-internal'
vf = 'version-android-internal.txt'
version = parts[0]
else:
li = 'lantern-installer'
vf = 'version-android.txt'
version = parts[0] if len(parts) > 0 else a
else:
li = 'lantern-installer-dev'
vf = 'version-android-dev.txt'
version = '9999.99.99-dev'
print('Setting version to ' + version)
print('Setting prefix to ' + li)
print('Setting version file to ' + vf)
print(f'::set-output name=version::{version}')
print(f'::set-output name=prefix::{li}')
print(f'::set-output name=version_file::{vf}')
build:
uses: ./.github/workflows/build.yml
secrets: inherit
needs: set-version
with:
macos_version: macos-15
xcode_version: latest-stable
version: ${{ needs.set-version.outputs.version }}
version_file: ${{ needs.set-version.outputs.version_file }}
prefix: ${{ needs.set-version.outputs.prefix }}
build-suffix: 64
windows-arch: x64
push-binaries:
runs-on: macos-latest
needs: [determine-platform, set-version, build]
env:
version: ${{ needs.set-version.outputs.version }}
version_file: ${{ needs.set-version.outputs.version_file }}
prefix: ${{ needs.set-version.outputs.prefix }}
platform: ${{ needs.determine-platform.outputs.platform }}
steps:
- name: Download the mac build output
uses: actions/download-artifact@v4
if: needs.determine-platform.outputs.platform == 'desktop' || needs.determine-platform.outputs.platform == 'all'
with:
name: macos-build
- name: Download the linux deb build output
uses: actions/download-artifact@v4
if: needs.determine-platform.outputs.platform == 'desktop' || needs.determine-platform.outputs.platform == 'all'
with:
name: linux-rpm-build
- name: Download the linux rpm build output
uses: actions/download-artifact@v4
if: needs.determine-platform.outputs.platform == 'desktop' || needs.determine-platform.outputs.platform == 'all'
with:
name: linux-deb-build
- name: Download the windows64 build output
uses: actions/download-artifact@v4
if: needs.determine-platform.outputs.platform == 'desktop' || needs.determine-platform.outputs.platform == 'all'
with:
name: windows64-installer-signed
# - name: Download the apk build output
# if: needs.determine-platform.outputs.platform == 'android' || needs.determine-platform.outputs.platform == 'all'
# uses: actions/download-artifact@v4
# with:
# name: android-apk-build
# - name: Download the aab build output
# if: needs.determine-platform.outputs.platform == 'android' || needs.determine-platform.outputs.platform == 'all'
# uses: actions/download-artifact@v4
# with:
# name: android-aab-build
- name: Download the Debug Symbols
if: needs.determine-platform.outputs.platform == 'android' || needs.determine-platform.outputs.platform == 'all'
uses: actions/download-artifact@v4
with:
name: debug-symbols.zip
- name: Download the mapping file
if: needs.determine-platform.outputs.platform == 'android' || needs.determine-platform.outputs.platform == 'all'
uses: actions/download-artifact@v4
with:
name: mapping.txt
# - name: Download the IPA
# if: needs.determine-platform.outputs.platform == 'ios' || needs.determine-platform.outputs.platform == 'all'
# uses: actions/download-artifact@v4
# with:
# name: Lantern.ipa
# - name: Upload Lantern to TestFlight
# uses: apple-actions/upload-testflight-build@v3.0.0
# if: (needs.set-version.outputs.prefix == 'lantern-installer-preview'|| needs.set-version.outputs.prefix == 'lantern-installer') && (needs.determine-platform.outputs.platform == 'ios' || needs.determine-platform.outputs.platform == 'all')
# with:
# app-path: Lantern.ipa
# issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
# api-key-id: ${{ secrets.APPSTORE_API_KEY_ID }}
# api-private-key: ${{ secrets.APPSTORE_API_PRIVATE_KEY }}
# - name: Upload Android App bundle to Play Store (beta)
# if: needs.set-version.outputs.prefix == 'lantern-installer-preview' && (needs.determine-platform.outputs.platform == 'android' || needs.determine-platform.outputs.platform == 'all')
# uses: r0adkll/upload-google-play@v1
# with:
# serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
# packageName: org.getlantern.lantern
# releaseFiles: lantern-installer.aab
# track: beta
# debugSymbols: debug-symbols.zip
# mappingFile: mapping.txt
# - name: Upload Android App bundle to Play Store (production)
# if: needs.set-version.outputs.prefix == 'lantern-installer' && (needs.determine-platform.outputs.platform == 'android' || needs.determine-platform.outputs.platform == 'all')
# uses: r0adkll/upload-google-play@v1
# with:
# serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
# packageName: org.getlantern.lantern
# releaseFiles: lantern-installer.aab
# track: production
# debugSymbols: debug-symbols.zip
# mappingFile: mapping.txt
- uses: actions/setup-python@v4
with:
python-version: "3.8"
- name: Install s3cmd
run: pip install s3cmd
- name: Set s3cmd permissions
run: |
echo "[default]" > "$HOME/.s3cfg"
echo "access_key = ${{ secrets.AWS_ACCESS_KEY }}" >> "$HOME/.s3cfg"
echo "secret_key = ${{ secrets.AWS_SECRET_KEY }}" >> "$HOME/.s3cfg"
- name: Upload binaries to S3
if: env.platform == 'desktop' || env.platform == 'all'
env:
macos_dist: "${{ env.prefix }}-${{ env.version }}.dmg"
macos_dist_versionless: "${{ env.prefix }}.dmg"
windows_dist: "${{env.prefix}}-${{env.version}}.exe"
windows_dist_versionless: "${{env.prefix}}.exe"
linux_dist: "${{env.prefix}}-${{env.version}}-64-bit.deb"
linux_dist_versionless: "${{env.prefix}}-64-bit.deb"
run: |
# macOS
mv lantern-installer.dmg ${{ env.macos_dist }}
cp ${{ env.macos_dist }} ${{ env.macos_dist_versionless }}
echo ${{ env.version }} > ${{ env.version_file }}
shasum -a 256 ${{ env.macos_dist }} | cut -d " " -f 1 > ${{ env.macos_dist }}.sha256
cp ${{ env.macos_dist }}.sha256 $${{ env.macos_dist_versionless }}.sha256
s3cmd put --acl-public ${{ env.macos_dist }} ${{ env.macos_dist }}.sha256 ${{ env.macos_dist_versionless }} ${{ env.macos_dist_versionless}}.sha256 ${{ env.version_file }} "s3://lantern"
# Windows
mv lantern-installer.exe ${{ env.windows_dist }}
cp ${{ env.windows_dist }} ${{ env.windows_dist_versionless }}
shasum -a 256 ${{ env.windows_dist }} | cut -d " " -f 1 > ${{ env.windows_dist }}.sha256
cp ${{ env.windows_dist }}.sha256 ${{ env.windows_dist_versionless }}.sha256
s3cmd put --acl-public ${{ env.windows_dist }} ${{ env.windows_dist }}.sha256 ${{ env.windows_dist_versionless }}.sha256 ${{ env.windows_dist_versionless }} "s3://lantern"
# Linux
mv lantern-installer-x64.deb ${{ env.linux_dist }}
mv lantern-installer-x64.rpm ${{ env.prefix }}.rpm
cp ${{ env.linux_dist }} ${{ env.linux_dist_versionless }}
shasum -a 256 ${{ env.linux_dist }} | cut -d " " -f 1 > ${{ env.linux_dist }}.sha256
cp ${{ env.linux_dist }}.sha256 ${{ env.linux_dist_versionless }}.sha256
ls -l
s3cmd put --acl-public ${{ env.linux_dist }} ${{ env.linux_dist }}.sha256 ${{ env.linux_dist_versionless }}.sha256 ${{ env.linux_dist_versionless }} "s3://lantern"
- name: Grant private modules access
run: git config --global url."https://${{ secrets.CI_PRIVATE_REPOS_GH_TOKEN }}:x-oauth-basic@github.com/".insteadOf "https://github.com/"
- name: Clone binaries repo
run: git clone --depth 1 https://github.com/getlantern/lantern-binaries
- name: Rename builds
env:
android_dist: "${{env.prefix}}-${{env.version}}"
android_dist_versionless: ${{env.prefix}}
run: |
if [[ "${{ env.platform }}" == "android" || "${{ env.platform }}" == "all" ]]; then
mv lantern-installer.apk ${{ env.android_dist }}.apk
mv lantern-installer.aab ${{ env.android_dist }}.aab
cp ${{ env.android_dist }}.apk ${{ env.android_dist_versionless }}.apk
cp ${{ env.android_dist }}.aab ${{ env.android_dist_versionless }}.aab
shasum -a 256 ${{ env.android_dist }}.apk | cut -d " " -f 1 > ${{ env.android_dist }}.apk.sha256
fi
if [[ "${{ env.platform }}" == "ios" || "${{ env.platform }}" == "all" ]]; then
mv -f Lantern.ipa ${{ env.prefix }}.ipa
fi
- name: Prepare sha256 sums
run: |
if [[ "${{ env.platform }}" == "android" || "${{ env.platform }}" == "all" ]]; then
shasum -a 256 ${{ env.prefix }}.apk | cut -d " " -f 1 > ${{ env.prefix }}.apk.sha256
shasum -a 256 ${{ env.prefix }}.aab | cut -d " " -f 1 > ${{ env.prefix }}.aab.sha256
fi
if [[ "${{ env.platform }}" == "ios" || "${{ env.platform }}" == "all" ]]; then
shasum -a 256 ${{ env.prefix }}.ipa | cut -d " " -f 1 > ${{ env.prefix }}.ipa.sha256
fi
- name: Commit
run: |
mv lantern-installer* ./lantern-binaries/
cd lantern-binaries
git config user.email "admin@getlantern.org"
git config user.name "Lantern Bot"
git add .
git commit -m "Lantern binaries for version ${{ env.version }}"
git push origin main
create-release:
uses: ./.github/workflows/prerelease-notification.yml
secrets: inherit
needs: [determine-platform, set-version, build, push-binaries]
with:
version: ${{ needs.set-version.outputs.prefix }}-${{ needs.set-version.outputs.version }}
platform: ${{ needs.determine-platform.outputs.platform }}