Skip to content

GH-48904: [C++][FlightRPC][CI][Packaging] Upload ODBC installer into GitHub release as RC#48934

Merged
kou merged 10 commits intoapache:mainfrom
Bit-Quill:gh-48904-odbc-github-release
Feb 10, 2026
Merged

GH-48904: [C++][FlightRPC][CI][Packaging] Upload ODBC installer into GitHub release as RC#48934
kou merged 10 commits intoapache:mainfrom
Bit-Quill:gh-48904-odbc-github-release

Conversation

@alinaliBQ
Copy link
Collaborator

@alinaliBQ alinaliBQ commented Jan 21, 2026

Rationale for this change

#48904

Upload ODBC as a GitHub draft release upon release candidate tag

What changes are included in this PR?

  • Create a draft GitHub release for ODBC, and upload the ODBC MSI to the draft release. ODBC release is only triggered by RC tag
  • add gh release ODBC download pattern to 04-binary-download.sh
  • add gh release ODBC upload pattern to 05-binary-upload.sh

Are these changes tested?

  • CI changes tested in forked repository, a draft GitHub release is created
  • 04-binary-download.sh and 05-binary-upload.sh changes are not tested

Are there any user-facing changes?

Yes, this PR adds GitHub release for Apache Arrow Flight SQL ODBC MSI installer.

@github-actions github-actions bot added the awaiting review Awaiting review label Jan 21, 2026
@github-actions
Copy link

⚠️ GitHub issue #48904 has been automatically assigned in GitHub to PR creator.

@github-actions github-actions bot added the CI: Extra: C++ Run extra C++ CI label Jan 21, 2026
Comment on lines 456 to 457
cd ../..
Move-Item -Path "build/cpp/Apache Arrow Flight SQL ODBC-*-win64.msi" -Destination "."
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved path to make it easier for uploading GitHub release

@alinaliBQ alinaliBQ changed the title GH-48904: [C++][FlightRPC][CI][Packaging] work-in-progress: Upload ODBC installer into GitHub release as RC GH-48904: [C++][FlightRPC][CI][Packaging] Upload ODBC installer into GitHub release as RC Jan 21, 2026
@github-actions github-actions bot added awaiting committer review Awaiting committer review and removed awaiting review Awaiting review labels Jan 21, 2026
Comment on lines 479 to 482
run: |
gh release upload ${GITHUB_REF_NAME} \
--clobber \
"Apache Arrow Flight SQL ODBC-*-win64.msi"
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No release notes are added in this PR. Please let me know if I should put the release notes in the PR

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to add release notes here.

@alinaliBQ alinaliBQ marked this pull request as ready for review January 21, 2026 23:29
Comment on lines 479 to 482
run: |
gh release upload ${GITHUB_REF_NAME} \
--clobber \
"Apache Arrow Flight SQL ODBC-*-win64.msi"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't need to add release notes here.

@github-actions github-actions bot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Jan 22, 2026
Copy link
Member

@raulcd raulcd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @alinaliBQ for working on this!
From my understanding we are going to integrate this to the major quarterly Arrow releases. Should we modify the tag to be triggered only on RCs, similar to how we do on Linux packaging jobs:

tags:
- "apache-arrow-*-rc*"

We should also add it to the binary download:
gh release download "${tag}" \
--dir "packages/${CROSSBOW_JOB_ID}" \
--pattern "almalinux-*.tar.gz" \
--pattern "amazon-linux-*.tar.gz" \
--pattern "centos-*.tar.gz" \
--pattern "debian-*.tar.gz" \
--pattern "ubuntu-*.tar.gz" \
--repo "${REPOSITORY:-apache/arrow}" \
--skip-existing

and the signing and upload to sign the released artifacts:
: "${UPLOAD_DEFAULT:=1}"
: "${UPLOAD_ALMALINUX:=${UPLOAD_DEFAULT}}"
: "${UPLOAD_AMAZON_LINUX:=${UPLOAD_DEFAULT}}"
: "${UPLOAD_CENTOS:=${UPLOAD_DEFAULT}}"
: "${UPLOAD_DEBIAN:=${UPLOAD_DEFAULT}}"
: "${UPLOAD_DOCS:=${UPLOAD_DEFAULT}}"
: "${UPLOAD_PYTHON:=${UPLOAD_DEFAULT}}"
: "${UPLOAD_R:=${UPLOAD_DEFAULT}}"
: "${UPLOAD_UBUNTU:=${UPLOAD_DEFAULT}}"

I am unsure if there is anything we have to do on verification apart from validating signatures. From my understanding if we upload to GH Release and add signatures the verification script will already validate the signature (nothing has to be done there) but better to double check.

@github-actions github-actions bot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Jan 23, 2026
@alinaliBQ
Copy link
Collaborator Author

@raulcd Thanks! I am working on the comments and testing on the forked repo before porting the changes over. Regarding the MSI signatures, I checked other Apache projects with MSI releases for reference. I found that Apache CouchDB does MSI signing (https://github.com/apache/couchdb-glazier/pull/29/changes) with JSign that signs the Apache CouchDB MSI with Digi Cert One credentials.
The current unsigned MSI pops up a notification "do you want to allow this app from an unknown publisher to make changes to your device?" when opened. Screenshot is attached. User can click "yes" and then complete install/uninstall, so there isn't any blockers for end users. Does the ODBC MSI installer require Windows Authenticode signature for an official release?
image

Copy link
Collaborator Author

@alinaliBQ alinaliBQ left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am still working on adding MSI to 05-binary-upload.sh.
Update: MSI has been added to 05-binary-upload.sh.

remote_key: ${{ secrets.NIGHTLIES_RSYNC_KEY }}
remote_host_key: ${{ secrets.NIGHTLIES_RSYNC_HOST_KEY }}

odbc-check-tags:
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Modified the tag to be triggered only on RCs.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this?

Can we use the following if: in odbc-release?

if: github.ref_type == 'tag' && contains(github.ref_name, '*-rc*')

or

if: github.ref_type == 'tag'

and

diff --git a/.github/workflows/cpp_extra.yml b/.github/workflows/cpp_extra.yml
index 49995752fa..9edec1f46b 100644
--- a/.github/workflows/cpp_extra.yml
+++ b/.github/workflows/cpp_extra.yml
@@ -43,7 +43,7 @@ on:
       - 'format/Flight.proto'
       - 'testing'
     tags:
-      - '**'
+      - 'apache-arrow-*-rc*'
   pull_request:
     paths:
       - '.dockerignore'

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This check is added for checking tag before the upload to GitHub release. It works like a simpler check_labels.yml for tags.

I think if we apply the change below, it will change the entire C++ Extra workflow to only be triggered by apache-arrow-*-rc* tags, and we want tags like C++ Extra to trigger the workflow as well.

     tags:
-      - '**'
+      - 'apache-arrow-*-rc*'

I think the contains(github.ref_name, '*-rc*') check is less strict compared to the current implementation, which I am leaning towards

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If *-rc* feels loose, we can use contains(github.ref_name, 'apache-arrow-*-rc*). I want to keep GitHub Actions configuration as much as simple for easy to maintain. So I want to remove this odbc-check-tags` step if possible.

Copy link
Collaborator Author

@alinaliBQ alinaliBQ Feb 6, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totally understandable. odbc-check-tags step has been removed. As a workaround, I have changed the approach to use

    if: ${{ startsWith(github.ref_name, 'apache-arrow-') && contains(github.ref_name, '-rc') }}

Please note that this check can pick up 'apache-arrow-rc' tag.

I have tried contains(github.ref_name, 'apache-arrow-*-rc*') and it didn't work, I think contains() doesn't support regex or wild card checks.

--pattern "centos-*.tar.gz" \
--pattern "debian-*.tar.gz" \
--pattern "ubuntu-*.tar.gz" \
--pattern "Apache Arrow Flight SQL ODBC-*-win64.msi" \
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added ODBC msi to the binary download

@alinaliBQ alinaliBQ force-pushed the gh-48904-odbc-github-release branch 2 times, most recently from 637e560 to b1c6888 Compare January 27, 2026 23:31
@alinaliBQ alinaliBQ requested review from kou and raulcd January 27, 2026 23:31
@amoeba
Copy link
Member

amoeba commented Jan 28, 2026

Hey @alinaliBQ, Re:

Does the ODBC MSI installer require Windows Authenticode signature for an official release?

While all artifacts must be signed, I'm not sure that level of code signing is strictly required for a release. That said, I think it would be best to take the extra steps to sign the installer so it shows up as trusted by Windows.

ASF Infra provides projects access to their DigiCert cert and has a help page for it: https://infra.apache.org/digicert-use.html. So for the Arrow project to sign those, I think one of us PMC members would need to go through that process and would also need to manually build and sign the MSI as part of the release process. @raulcd @kou does that sound doable to have a manual step like that? I could go through the ASF process and do the signing.

@alinaliBQ alinaliBQ force-pushed the gh-48904-odbc-github-release branch from b1c6888 to 558318e Compare January 28, 2026 20:09
@kou
Copy link
Member

kou commented Jan 30, 2026

It seems that we can sign built MSI. So we may not need to build MSI manually. We can use uploaded MSI on GitHub Release instead.

I can also help it because it seems that we can sign on Linux by JSign.

@github-actions github-actions bot added awaiting review Awaiting review awaiting merge Awaiting merge awaiting committer review Awaiting committer review and removed awaiting review Awaiting review awaiting merge Awaiting merge labels Feb 7, 2026
@alinaliBQ alinaliBQ force-pushed the gh-48904-odbc-github-release branch from 2296e7e to ee4729f Compare February 9, 2026 18:40
Comment on lines 571 to 573
odbc-nightly:
needs: odbc
needs: odbc-msvc
name: ODBC nightly
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change should fix the c++ extra error, sorry I didn't catch this earlier

@kou
Copy link
Member

kou commented Feb 9, 2026

Could you rebase on main?

@github-actions github-actions bot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Feb 9, 2026
alinaliBQ and others added 10 commits February 9, 2026 14:00
Add ODBC to `05-binary-upload.sh`

Undo move path for installer

Work on Raul's comments

- Modify the tag to be triggered only on RCs.
- add ODBC msi to the binary download.

Apply kou's suggestion

Remove commented out test
Reason: ODBC MSI automatically get added periods in the names, this is behavior by design in GitHub, see:
https://github.com/orgs/community/discussions/60449
- remove quotes
- revert accidental permission change
This achieves similar effect as
    tags:
      - "apache-arrow-*-rc*"
@alinaliBQ alinaliBQ force-pushed the gh-48904-odbc-github-release branch from ee4729f to 195ed13 Compare February 9, 2026 22:00
@alinaliBQ
Copy link
Collaborator Author

Could you rebase on main?

Yes, done

@github-actions github-actions bot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Feb 9, 2026
@kou kou merged commit f32f8ac into apache:main Feb 10, 2026
56 of 58 checks passed
@kou kou removed the awaiting change review Awaiting change review label Feb 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants