diff --git a/.github/workflows/sunnypilot-build-prebuilt.yaml b/.github/workflows/sunnypilot-build-prebuilt.yaml index 147a87d6d1..04556e3a41 100644 --- a/.github/workflows/sunnypilot-build-prebuilt.yaml +++ b/.github/workflows/sunnypilot-build-prebuilt.yaml @@ -5,7 +5,7 @@ env: OUTPUT_DIR: ${{ github.workspace }}/output CI_DIR: ${{ github.workspace }}/release/ci SCONS_CACHE_DIR: ${{ github.workspace }}/release/ci/scons_cache - PUBLIC_REPO_URL: "https://github.com/sunnyhaibin/sunnypilot" + PUBLIC_REPO_URL: "https://github.com/sunnypilot/sunnypilot" # Branch configurations MASTER_BRANCH: "master" @@ -32,12 +32,14 @@ on: jobs: build: + concurrency: + group: build-${{ github.head_ref || github.ref_name }} + cancel-in-progress: false runs-on: self-hosted outputs: new_branch: ${{ steps.set-env.outputs.new_branch }} version: ${{ steps.set-env.outputs.version }} extra_version_identifier: ${{ steps.set-env.outputs.extra_version_identifier }} - should_publish: ${{ steps.set-env.outputs.should_publish }} steps: - uses: actions/checkout@v4 with: @@ -48,47 +50,43 @@ jobs: uses: actions/cache@v4 with: path: ${{env.SCONS_CACHE_DIR}} - key: scons-${{ runner.os }}-${{ runner.arch }}-${{ github.ref_name }}-${{ github.head_ref }}-${{ github.sha }} + key: scons-${{ runner.os }}-${{ runner.arch }}-${{ github.head_ref || github.ref_name }}-${{ github.sha }} restore-keys: | - scons-${{ runner.os }}-${{ runner.arch }}-${{ github.ref_name }}-${{ github.head_ref }} + scons-${{ runner.os }}-${{ runner.arch }}-${{ github.head_ref }} scons-${{ runner.os }}-${{ runner.arch }}-${{ github.ref_name }} scons-${{ runner.os }}-${{ runner.arch }}-${{ env.MASTER_NEW_BRANCH }} scons-${{ runner.os }}-${{ runner.arch }}-${{ env.MASTER_BRANCH }} scons-${{ runner.os }}-${{ runner.arch }} - - name: Configure for dev branch - if: github.ref_name == env.DEV_C3_SOURCE_BRANCH + - name: Set Configuration run: | - echo "BRANCH_TYPE=dev" >> $GITHUB_ENV - echo "NEW_BRANCH=${{ env.DEV_TARGET_BRANCH }}" >> $GITHUB_ENV - echo "EXTRA_VERSION_IDENTIFIER=${{ github.run_number }}" >> $GITHUB_ENV - echo "SHOULD_PUBLISH=true" >> $GITHUB_ENV - - - name: Configure for master branches - if: github.ref_name == env.MASTER_BRANCH || github.ref_name == env.MASTER_NEW_BRANCH - run: | - echo "BRANCH_TYPE=master" >> $GITHUB_ENV - echo "NEW_BRANCH=${{ env.STAGING_TARGET_BRANCH }}" >> $GITHUB_ENV - echo "EXTRA_VERSION_IDENTIFIER=staging" >> $GITHUB_ENV - echo "VERSION=$(cat common/version.h | grep COMMA_VERSION | sed -e 's/[^0-9|.]//g')" >> $GITHUB_ENV - echo "SHOULD_PUBLISH=true" >> $GITHUB_ENV - - - name: Configure for tags - if: startsWith(github.ref, 'refs/tags/') - run: | - echo "BRANCH_TYPE=tag" >> $GITHUB_ENV - echo "NEW_BRANCH=${{ env.RELEASE_TARGET_BRANCH }}" >> $GITHUB_ENV - echo "EXTRA_VERSION_IDENTIFIER=release" >> $GITHUB_ENV - echo "VERSION=$(cat common/version.h | grep COMMA_VERSION | sed -e 's/[^0-9|.]//g')" >> $GITHUB_ENV - echo "SHOULD_PUBLISH=true" >> $GITHUB_ENV - - - name: Configure for manual build - if: github.event_name == 'workflow_dispatch' - run: | - echo "BRANCH_TYPE=dispatch" >> $GITHUB_ENV - echo "NEW_BRANCH=${{ github.ref_name }}-prebuilt" >> $GITHUB_ENV - echo "VERSION=$(date '+%Y.%m.%d')-${{ github.run_number }}" >> $GITHUB_ENV - echo "SHOULD_PUBLISH=true" >> $GITHUB_ENV + if [[ "${{ github.ref_name }}" == "${{ env.DEV_C3_SOURCE_BRANCH }}" ]]; then + # Dev configuration + echo "BRANCH_TYPE=dev" >> $GITHUB_ENV + echo "NEW_BRANCH=${{ env.DEV_TARGET_BRANCH }}" >> $GITHUB_ENV + echo "VERSION=$(date '+%Y.%m.%d')-${{ github.run_number }}" >> $GITHUB_ENV + echo "EXTRA_VERSION_IDENTIFIER=${{ github.run_number }}" >> $GITHUB_ENV + + elif [[ "${{ github.ref_name }}" == "${{ env.MASTER_BRANCH }}" || "${{ github.ref_name }}" == "${{ env.MASTER_NEW_BRANCH }}" ]]; then + # Master configuration + echo "BRANCH_TYPE=master" >> $GITHUB_ENV + echo "NEW_BRANCH=${{ env.STAGING_TARGET_BRANCH }}" >> $GITHUB_ENV + echo "EXTRA_VERSION_IDENTIFIER=staging" >> $GITHUB_ENV + echo "VERSION=$(cat common/version.h | grep COMMA_VERSION | sed -e 's/[^0-9|.]//g')" >> $GITHUB_ENV + + elif [[ "${{ github.ref }}" == refs/tags/* ]]; then + # Tag configuration + echo "BRANCH_TYPE=tag" >> $GITHUB_ENV + echo "NEW_BRANCH=${{ env.RELEASE_TARGET_BRANCH }}" >> $GITHUB_ENV + echo "EXTRA_VERSION_IDENTIFIER=release" >> $GITHUB_ENV + echo "VERSION=$(cat common/version.h | grep COMMA_VERSION | sed -e 's/[^0-9|.]//g')" >> $GITHUB_ENV + + else + # Feature branch configuration + echo "BRANCH_TYPE=dispatch" >> $GITHUB_ENV + echo "NEW_BRANCH=${{ github.head_ref || github.ref_name }}-prebuilt" >> $GITHUB_ENV + echo "VERSION=$(date '+%Y.%m.%d')-${{ github.run_number }}" >> $GITHUB_ENV + fi - name: Set environment variables id: set-env @@ -97,7 +95,6 @@ jobs: echo "new_branch=$NEW_BRANCH" >> $GITHUB_OUTPUT [[ ! -z "$EXTRA_VERSION_IDENTIFIER" ]] && echo "extra_version_identifier=$EXTRA_VERSION_IDENTIFIER" >> $GITHUB_OUTPUT [[ ! -z "$VERSION" ]] && echo "version=$VERSION" >> $GITHUB_OUTPUT - echo "should_publish=${SHOULD_PUBLISH:-false}" >> $GITHUB_OUTPUT # Set up common environment source /etc/profile; @@ -190,10 +187,13 @@ jobs: name: prebuilt path: prebuilt.tar.gz - publish-public: + publish: + concurrency: + group: publish-${{ github.head_ref || github.ref_name }} + cancel-in-progress: true needs: build - runs-on: ubuntu-latest - if: needs.build.outputs.should_publish == 'true' + runs-on: ubuntu-24.04 + environment: ${{ contains(fromJSON(vars.AUTO_DEPLOY_PREBUILT_BRANCHES), github.head_ref || github.ref_name) && 'auto-deploy' || 'feature-branch' }} steps: - uses: actions/checkout@v4 @@ -226,26 +226,41 @@ jobs: "${{ needs.build.outputs.version }}" \ "https://x-access-token:${{github.token}}@github.com/sunnypilot/sunnypilot.git" \ "-${{ needs.build.outputs.extra_version_identifier }}" + + echo "" + echo "---- ℹ️ To update the list of branches that auto deploy prebuilts -----" + echo "" + echo "1. Go to: ${{ github.server_url }}/${{ github.repository }}/settings/variables/actions/AUTO_DEPLOY_PREBUILT_BRANCHES" + echo "2. Current value: ${{ vars.AUTO_DEPLOY_PREBUILT_BRANCHES }}" + echo "3. Update as needed (JSON array with no spaces)" notify: - needs: [ build, publish-public ] - runs-on: ubuntu-latest - if: needs.build.outputs.new_branch != '' - + needs: [ build, publish ] + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y curl jq gettext-base + - name: Setup Alpine Linux environment + uses: jirutka/setup-alpine@v1.2.0 + with: + packages: 'jq gettext curl' - name: Send Discord Notification env: - DISCORD_WEBHOOK: ${{ needs.build.outputs.new_branch == 'dev-c3' && secrets.DISCORD_NEW_BUILD_WEBHOOK_URL || secrets.DISCORD_MANUAL_BUILD_WEBHOOK_URL }} + DISCORD_WEBHOOK: ${{ contains(fromJSON(vars.DEV_FEEDBACK_NOTIFICATION_BRANCHES), github.head_ref || github.ref_name) && secrets.DISCORD_DEV_FEEDBACK_CHANNEL_WEBHOOK || secrets.DISCORD_DEV_PRIVATE_CHANNEL_WEBHOOK }} run: | - TEMPLATE="${{ needs.build.outputs.new_branch == 'dev-c3' && 'discord_template_notify_dev_public.json' || 'discord_template_notify_dev_private.json' }}" + TEMPLATE='${{ vars.DISCORD_GENERAL_UPDATE_NOTICE }}' export EXTRA_VERSION_IDENTIFIER="${{ needs.build.outputs.extra_version_identifier }}" export VERSION="${{ needs.build.outputs.version }}" - cat release/ci/${TEMPLATE} | envsubst > payload.json - curl -X POST -H "Content-Type: application/json" -d @payload.json $DISCORD_WEBHOOK \ No newline at end of file + export branch_name=${{ github.head_ref || github.ref_name }} + export new_branch=${{ needs.build.outputs.new_branch }} + export extra_version_identifier=${{ needs.build.outputs.extra_version_identifier || github.run_number}} + echo ${TEMPLATE} | envsubst | jq -c '.' | tee payload.json + curl -X POST -H "Content-Type: application/json" -d @payload.json $DISCORD_WEBHOOK + + echo "" + echo "---- ℹ️ To update the list of branches that notify to dev-feedback -----" + echo "" + echo "1. Go to: ${{ github.server_url }}/${{ github.repository }}/settings/variables/actions/DEV_FEEDBACK_NOTIFICATION_BRANCHES" + echo "2. Current value: ${{ vars.DEV_FEEDBACK_NOTIFICATION_BRANCHES }}" + echo "3. Update as needed (JSON array with no spaces)" + shell: alpine.sh {0} \ No newline at end of file diff --git a/release/ci/discord_template_notify_dev_private.json b/release/ci/discord_template_notify_dev_private.json deleted file mode 100644 index 5da1e4d405..0000000000 --- a/release/ci/discord_template_notify_dev_private.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "embeds": [ - { - "title": "❗️ Action Required for `${CI_COMMIT_REF_NAME}` ❗️", - "description": "[${CI_PROJECT_NAME}](${CI_PROJECT_URL}): Pipeline [#${CI_PIPELINE_ID}](${CI_PROJECT_URL}/-/pipelines/${CI_PIPELINE_ID}) of branch [${CI_COMMIT_REF_NAME}](${CI_PROJECT_URL}/-/commits/${CI_COMMIT_REF_NAME}) by ${GITLAB_USER_NAME} (${GITLAB_USER_LOGIN}) is ready to publish manually as [${NEW_BRANCH}](${PUBLIC_REPO_URL}/tree/${NEW_BRANCH})", - "color": 16763904, - "author": { - "name": "${GITLAB_USER_LOGIN}", - "icon_url": "${AVATAR_URL}" - } - } - ] -} diff --git a/release/ci/discord_template_notify_dev_public.json b/release/ci/discord_template_notify_dev_public.json deleted file mode 100644 index c933ea10b4..0000000000 --- a/release/ci/discord_template_notify_dev_public.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "embeds": [ - { - "title": "🎉 sunnypilot `${NEW_BRANCH}` New Update 🎉", - "description": "[sunnypilot](${PUBLIC_REPO_URL}): Build #${EXTRA_VERSION_IDENTIFIER} of branch [${NEW_BRANCH}](${PUBLIC_REPO_URL}/tree/${NEW_BRANCH}) has been published.\n\nDrive safe! 🚗💨", - "color": 4321431 - } - ] -}