feat: add vectorindex proto (#185) #196
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: On Push | |
on: | |
push: | |
branches: [main] | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.release.outputs.release }} | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Set release | |
id: semrel | |
uses: go-semantic-release/action@v1 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
allow-initial-development-versions: true | |
force-bump-patch-version: true | |
- name: Output release | |
id: release | |
run: echo "::set-output name=release::${{ steps.semrel.outputs.version }}" | |
# Detect changes to specific directories to let downstream release jobs run conditionally | |
changes: | |
name: Detect changes in last commit | |
runs-on: ubuntu-latest | |
outputs: | |
protos: ${{ steps.filter.outputs.protos }} | |
java: ${{ steps.filter.outputs.java }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dorny/paths-filter@v2 | |
id: filter | |
with: | |
base: main | |
filters: | | |
protos: | |
- 'protos/**' | |
java: | |
- 'java/**' | |
- name: Debug Outputs | |
run: | | |
echo "Protos output: ${{ steps.filter.outputs.protos }}" | |
echo "Java output: ${{ steps.filter.outputs.java }}" | |
publish_javascript: | |
# The type of runner that the job will run on | |
runs-on: ubuntu-latest | |
needs: release | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install Node | |
uses: actions/setup-node@v1 | |
with: | |
node-version: 16 | |
registry-url: "https://registry.npmjs.org" | |
- name: Install protoc | |
run: ./install_protoc.sh | |
- name: Build package | |
run: | | |
set -e | |
set -x | |
export PATH=`pwd`/protoc/bin/:$PATH | |
pushd javascript | |
npm ci | |
npm run build | |
popd | |
shell: bash | |
- name: Publish npm package | |
run: | | |
export VERSION="${{ needs.release.outputs.version }}" | |
echo "Publishing package with version $VERSION" | |
pushd javascript | |
mv package.json package.json.ORIG | |
cat package.json.ORIG|jq ". += {\"version\": \"$VERSION\"}" > package.json | |
npm publish | |
popd | |
shell: bash | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
publish_javascript-web: | |
# The type of runner that the job will run on | |
runs-on: ubuntu-latest | |
needs: release | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Install Node | |
uses: actions/setup-node@v1 | |
with: | |
node-version: 16 | |
registry-url: "https://registry.npmjs.org" | |
- name: Install protoc | |
run: ./install_protoc.sh | |
- name: Build package | |
run: | | |
set -e | |
set -x | |
export PATH=`pwd`/protoc/bin/:$PATH | |
pushd javascript-web | |
npm ci | |
npm run build | |
popd | |
shell: bash | |
- name: Publish npm package | |
run: | | |
export VERSION="${{ needs.release.outputs.version }}" | |
echo "Publishing package with version $VERSION" | |
pushd javascript-web | |
mv package.json package.json.ORIG | |
cat package.json.ORIG|jq ". += {\"version\": \"$VERSION\"}" > package.json | |
npm publish --access public | |
popd | |
shell: bash | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
publish_java: | |
runs-on: ubuntu-latest | |
needs: [release, changes] | |
# Temporarily disable this while debugging conditional release action | |
#if: ${{ needs.changes.outputs.protos == 'true' || needs.changes.outputs.java == 'true' }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Publish to sonatype | |
env: | |
SONATYPE_SIGNING_KEY: ${{ secrets.SONATYPE_SIGNING_KEY }} | |
SONATYPE_SIGNING_KEY_PASSWORD: ${{ secrets.SONATYPE_SIGNING_KEY_PASSWORD }} | |
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} | |
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} | |
JAVA_PROTOS_VERSION: ${{ needs.release.outputs.version }} | |
uses: gradle/gradle-build-action@v2 | |
with: | |
build-root-directory: ./java | |
gradle-version: wrapper | |
arguments: publishToSonatype closeAndReleaseStagingRepository | |
publish_kotlin: | |
runs-on: ubuntu-latest | |
needs: release | |
steps: | |
- name: Assume Role | |
uses: aws-actions/configure-aws-credentials@v1 | |
with: | |
# TODO User: arn:aws:iam::***:user/shared-control-plane-deploy-user is not authorized to perform: sts:TagSession on resource: arn:aws:iam::***:role/control-plane-remote-deployer | |
role-skip-session-tagging: true | |
aws-access-key-id: ${{ secrets.PROD_CICD_DEPLOY_USER_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.PROD_CICD_DEPLOY_USER_SECRET_ACCESS_KEY }} | |
aws-region: us-west-2 | |
role-to-assume: arn:aws:iam::401011790710:role/control-plane-remote-deployer | |
role-session-name: cicd-deployer | |
role-duration-seconds: 900 | |
- name: Get CodeArtifact token | |
run: | | |
TOKEN=$(aws codeartifact get-authorization-token \ | |
--domain momento-prod --domain-owner 401011790710 \ | |
--query authorizationToken --output text) | |
echo "::add-mask::$TOKEN" | |
echo "CODEARTIFACT_AUTH_TOKEN=$TOKEN" >> $GITHUB_ENV | |
- name: Set up JDK 11 | |
uses: actions/setup-java@v1 | |
with: | |
java-version: 11 | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Publish to CodeArtifact | |
run: | | |
VERSION="${{needs.release.outputs.version}}" | |
echo "version: ${VERSION}" | |
pushd kotlin-messages | |
./gradlew publish -Pversion=$VERSION | |
popd | |
publish_python: | |
# The type of runner that the job will run on | |
runs-on: ubuntu-latest | |
needs: release | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.10" | |
- name: Bootstrap poetry | |
run: | | |
curl -sL https://install.python-poetry.org | python - -y --version 1.4.2 | |
- name: Configure poetry | |
run: poetry config virtualenvs.in-project true | |
- name: Install dependencies | |
working-directory: python | |
run: make install | |
- name: Bump version | |
working-directory: python | |
run: poetry version ${{ needs.release.outputs.version }} | |
- name: Build package | |
working-directory: python | |
run: make build | |
- name: Publish package | |
working-directory: python | |
env: | |
POETRY_PYPI_TOKEN_PYPI: ${{ secrets.CLIENT_PROTO_PYPI_TOKEN }} | |
run: poetry publish | |
publish_csharp: | |
# The type of runner that the job will run on | |
runs-on: ubuntu-latest | |
needs: release | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: "6.0.x" | |
- name: Pack and Publish | |
run: | | |
set -x | |
pushd csharp | |
VERSION="${{needs.release.outputs.version}}" | |
echo "version: ${VERSION}" | |
dotnet build --configuration Release | |
dotnet pack -property:Version=${VERSION} --configuration Release | |
pushd bin/Release | |
dotnet nuget push Momento.Protos.${VERSION}.nupkg --source https://api.nuget.org/v3/index.json --api-key=${{secrets.NUGET_API_KEY}} | |
popd | |
popd | |
shell: bash | |
publish_rust: | |
runs-on: ubuntu-latest | |
needs: release | |
steps: | |
- name: Get current time | |
uses: gerred/actions/current-time@master | |
id: current-time | |
- uses: actions/checkout@v2 | |
- name: Install protoc | |
run: ./install_protoc.sh | |
- name: Update Cargo Version | |
run: | | |
pushd rust | |
chmod +x set_cargo_package_version.sh | |
./set_cargo_package_version.sh ${{needs.release.outputs.version}} | |
popd | |
shell: bash | |
- name: Build | |
run: | | |
set -e | |
set -x | |
pushd rust/momento-protos | |
echo make sure the code generator runs first so the files are there when we build momento-protos | |
cargo build -p codegenerator | |
VERSION="${{needs.release.outputs.version}}" | |
cargo build --release | |
popd | |
shell: bash | |
- name: Remove crates publish blocker | |
run: | | |
set -e | |
set -x | |
pushd rust/momento-protos/src | |
echo Removing .gitignore file so cargo publish picks up the generated proto *.rs files. | |
echo Cargo publish respects .gitignore, but we use that file to help developers changing protos. | |
echo Once we are on github and publishing, the presence of that file blocks us from publishing the | |
echo generated protos. Since that is what we are trying to do, we have to remove it during the | |
echo github publish. | |
echo Note that it is still helpful to have it in local clones, as you can still generate your protos | |
echo and inspect the output over here in momento-protos/src without fear of accidentally submitting | |
echo locally generated source files. This is a publish-time concern only! | |
echo In case you are curious, we are doing all of this so end users of the momento client sdk do not | |
echo need to have protoc installed solely on our account. | |
ls -alh | |
rm .gitignore | |
popd | |
shell: bash | |
- name: Release | |
env: | |
# TODO: Match the token with https://github.com/momentohq/client-sdk-rust/blob/main/.github/workflows/cd.yml | |
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_PUBLISH_TOKEN }} | |
run: | | |
set -e | |
set -x | |
pushd rust | |
# Because we locally modify Cargo.toml earlier during this publish workflow, we can't simply disallow dirty | |
# and we can't verify. We did a check at PR time to help catch some classes of proto error, but it's still | |
# kind of a loose publish check here. | |
cargo publish -p momento-protos --allow-dirty --no-verify | |
popd | |
shell: bash |