name: Release on: push: tags: - "v*.*.*" permissions: write-all jobs: check-versions: runs-on: ubuntu-latest outputs: semver: ${{ steps.validate.outputs.semver }} steps: - name: 'Checkout' uses: actions/checkout@v4 - name: 'Validate versions match (tag, backend, frontend, Android)' id: validate shell: bash run: | semver=$(git describe --tags --abbrev=0) IFS=- read -ra semverArray <<< $semver tagV=$(echo ${semverArray[0]} | sed 's/v//') clientV=$(jq -r .version frontend/package.json) androidV=$(grep -oP '(?<=versionName ").*?((?=\-)|$)' mobile/android/app/build.gradle) coordinatorV=$(jq -r .major version.json).$(jq -r .minor version.json).$(jq -r .patch version.json) printf "Client version: ${clientV}\nCoordinator version: ${coordinatorV}\nGit tag version: ${tagV}\n" if [ "$coordinatorV" = "$clientV" ] && [ "$coordinatorV" = "$tagV" ] && [ "$coordinatorV" = "$androidV" ]; then echo "Versions match!" echo '::set-output name=semver::'$semver else echo "Versions do not match! You might have forgotten to update the version on a component."; exit $ERRCODE; fi frontend-build: uses: RoboSats/robosats/.github/workflows/frontend-build.yml@main needs: check-versions with: semver: ${{ needs.check-versions.outputs.semver }} integration-tests: uses: RoboSats/robosats/.github/workflows/integration-tests.yml@main needs: [frontend-build, check-versions] coordinator-image: uses: RoboSats/robosats/.github/workflows/coordinator-image.yml@main needs: [frontend-build, integration-tests, check-versions] secrets: inherit with: semver: ${{ needs.check-versions.outputs.semver }} selfhosted-client-image: uses: RoboSats/robosats/.github/workflows/selfhosted-client-image.yml@main needs: [frontend-build, check-versions] secrets: inherit with: semver: ${{ needs.check-versions.outputs.semver }} web-client-image: uses: RoboSats/robosats/.github/workflows/web-client-image.yml@main needs: [frontend-build, check-versions] secrets: inherit with: semver: ${{ needs.check-versions.outputs.semver }} android-build: uses: RoboSats/robosats/.github/workflows/android-build.yml@main needs: [frontend-build, check-versions] secrets: inherit with: semver: ${{ needs.check-versions.outputs.semver }} desktop-build: uses: RoboSats/robosats/.github/workflows/desktop-build.yml@main needs: [frontend-build, check-versions] secrets: inherit with: semver: ${{ needs.check-versions.outputs.semver }} release: needs: [check-versions, integration-tests, coordinator-image, selfhosted-client-image, web-client-image, android-build, desktop-build] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Release id: create-release uses: softprops/action-gh-release@v2 with: body_path: release_notes.md generate_release_notes: true # Upload app-universal-release APK artifact asset - name: 'Download universal APK Artifact' uses: actions/download-artifact@v4 with: name: robosats-${{ needs.check-versions.outputs.semver }}-universal.apk path: . - name: 'Upload universal APK Asset' id: upload-universal-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: app-universal-release.apk asset_name: robosats-${{ needs.check-versions.outputs.semver }}-universal.apk asset_content_type: application/apk # Upload app-arm64-v8a-release APK artifact asset - name: 'Download arm64-v8a APK Artifact' uses: actions/download-artifact@v4 with: name: robosats-${{ needs.check-versions.outputs.semver }}-arm64-v8a.apk path: . - name: 'Upload arm64-v8a APK Asset' id: upload-arm64-v8a-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: app-arm64-v8a-release.apk asset_name: robosats-${{ needs.check-versions.outputs.semver }}-arm64-v8a.apk asset_content_type: application/apk # Upload app-armeabi-v7a-release APK artifact asset - name: 'Download armeabi-v7a APK Artifact' uses: actions/download-artifact@v4 with: name: robosats-${{ needs.check-versions.outputs.semver }}-armeabi-v7a.apk path: . - name: 'Upload armeabi-v7a APK Asset' id: upload-armeabi-v7a-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: app-armeabi-v7a-release.apk asset_name: robosats-${{ needs.check-versions.outputs.semver }}-armeabi-v7a.apk asset_content_type: application/apk # Upload app-x86_64-release APK artifact asset - name: 'Download x86_64 APK Artifact' uses: actions/download-artifact@v4 with: name: robosats-${{ needs.check-versions.outputs.semver }}-x86_64.apk path: . - name: 'Upload x86_64 APK Asset' id: upload-x86_64-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: app-x86_64-release.apk asset_name: robosats-${{ needs.check-versions.outputs.semver }}-x86_64.apk asset_content_type: application/apk # Upload app-x86-release APK artifact asset - name: 'Download x86 APK Artifact' uses: actions/download-artifact@v4 with: name: robosats-${{ needs.check-versions.outputs.semver }}-x86.apk path: . - name: 'Upload x86 APK Asset' id: upload-x86-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: app-x86-release.apk asset_name: robosats-${{ needs.check-versions.outputs.semver }}-x86.apk asset_content_type: application/apk - name: 'Download macOS Build Artifact' uses: actions/download-artifact@v4 with: name: robosats-desktop-${{ needs.check-versions.outputs.semver }}-mac-darwin-x64.zip path: . - name: 'Upload macOS Build Artifact' id: upload-release-mac-zip-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: robosats-desktop-${{ needs.check-versions.outputs.semver }}-mac-darwin-x64.zip asset_name: robosats-desktop-${{ needs.check-versions.outputs.semver }}-mac-darwin-x64.zip asset_content_type: application/zip - name: 'Download linux Build Artifact' uses: actions/download-artifact@v4 with: name: robosats-desktop-${{ needs.check-versions.outputs.semver }}-linux-x64.zip path: . - name: 'Upload linux Build Artifact' id: upload-release-linux-zip-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: robosats-desktop-${{ needs.check-versions.outputs.semver }}-linux-x64.zip asset_name: robosats-desktop-${{ needs.check-versions.outputs.semver }}-linux-x64.zip asset_content_type: application/zip - name: 'Download Windows Build Artifact' uses: actions/download-artifact@v4 with: name: robosats-desktop-${{ needs.check-versions.outputs.semver }}-win32-ia32.zip path: . - name: 'Upload Windows Build Artifact' id: upload-release-win-zip-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create-release.outputs.upload_url }} asset_path: robosats-desktop-${{ needs.check-versions.outputs.semver }}-win32-ia32.zip asset_name: robosats-desktop-${{ needs.check-versions.outputs.semver }}-win32-ia32.zip asset_content_type: application/zip