Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parallel release #2161

Merged
merged 61 commits into from
Oct 29, 2024
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
3b6b84c
try parallel release
bdemann Oct 14, 2024
b6aef35
WIP
bdemann Oct 14, 2024
2024b93
move into workflow
bdemann Oct 14, 2024
f78d288
fixup
bdemann Oct 14, 2024
52d6840
pass npm token secret
bdemann Oct 15, 2024
bff3610
fixup
bdemann Oct 15, 2024
a391563
fixup
bdemann Oct 15, 2024
1d4468d
install dfx before npm install
bdemann Oct 15, 2024
042cb70
make sure all commits are verified
bdemann Oct 15, 2024
1d94df3
add release version to the branch names
bdemann Oct 15, 2024
6a91528
add env variable
bdemann Oct 15, 2024
6bab4a4
update checkout
bdemann Oct 15, 2024
9b2f482
create branch
bdemann Oct 15, 2024
2da525f
remove sub release trouble shooter
bdemann Oct 15, 2024
41cffb9
make sure branches are unique
bdemann Oct 15, 2024
76f1f52
try these things
bdemann Oct 15, 2024
c539b67
update finalize release step
bdemann Oct 15, 2024
14fcc97
fetch the branch
bdemann Oct 15, 2024
d85a32d
clean up
bdemann Oct 16, 2024
58ba02b
use PAT
bdemann Oct 16, 2024
fcef3f5
correctly bring in the lastmjs pat
bdemann Oct 18, 2024
d4ebd9b
remove explicit path
bdemann Oct 18, 2024
f750d1a
Merge branch 'main' into parallel_release
lastmjs Oct 22, 2024
1b7da25
pr fixes
bdemann Oct 23, 2024
bda1f3c
further update names
bdemann Oct 23, 2024
73d0126
restore old husky install
bdemann Oct 24, 2024
10c660f
get rid of GH_TOKEN
bdemann Oct 24, 2024
e223122
Merge branch 'main' into parallel_release
bdemann Oct 24, 2024
eee67f6
install azle before updating azle
bdemann Oct 24, 2024
6386be2
bring back GH_TOKEN
bdemann Oct 24, 2024
ec0424d
try just fetching as we need
bdemann Oct 24, 2024
df84c5d
simpler getting of the current branch
bdemann Oct 24, 2024
39f42da
try a squashing strategy
bdemann Oct 24, 2024
bd559c3
just do fetch all
bdemann Oct 24, 2024
9929a89
switch to cherry picking
bdemann Oct 24, 2024
b81f015
do a soft reset to squash all commits into one
bdemann Oct 24, 2024
622de9d
try squash again
bdemann Oct 24, 2024
14df4fd
move install dfx into a setup dfx action
bdemann Oct 25, 2024
9cb3b93
fix include_npm
bdemann Oct 25, 2024
790eccb
run tests for benchmarks during release
bdemann Oct 25, 2024
d24b466
clean up fetching workflow
bdemann Oct 25, 2024
8980ae1
batch delete branches
bdemann Oct 25, 2024
406b869
batch fetching
bdemann Oct 25, 2024
5549518
make delete like fetch
bdemann Oct 25, 2024
b778706
simplification
bdemann Oct 28, 2024
aa3beb1
better display
bdemann Oct 28, 2024
a5c85b2
switch to while read to
bdemann Oct 28, 2024
c744d26
clean up counts and expand run
bdemann Oct 28, 2024
68cf4a2
don't use pipe so that the subshell won't eat the output
bdemann Oct 28, 2024
37fcbcf
create configure git action
bdemann Oct 28, 2024
7a3585e
remove install curl
bdemann Oct 28, 2024
d1bf022
create setup-node action
bdemann Oct 28, 2024
308968e
clean up code
bdemann Oct 28, 2024
5c9b025
remove inputs from set-up node
bdemann Oct 28, 2024
e800a20
get rid or dfx input
bdemann Oct 28, 2024
c15b223
update branch name
bdemann Oct 28, 2024
e13123e
delete file
bdemann Oct 28, 2024
e82f7c6
restore node-version
bdemann Oct 28, 2024
c9e2500
use for loops instead of while loops
bdemann Oct 28, 2024
e133667
bring back key inputs
bdemann Oct 28, 2024
f75a47f
clean up squash
bdemann Oct 28, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 23 additions & 23 deletions .github/scripts/publish_github_action.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,34 +26,34 @@ else
npm publish
fi

# TODO loop through checking for the status instead of sleeping
echo -e "sleeping for 30 seconds to ensure azle@$VERSION is fully registered on npm"
# # TODO loop through checking for the status instead of sleeping
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
# echo -e "sleeping for 30 seconds to ensure azle@$VERSION is fully registered on npm"

sleep 30
# sleep 30

for directory in ${directories[@]}
do
cd "$directory"
echo "updating $directory"
# for directory in ${directories[@]}
# do
# cd "$directory"
# echo "updating $directory"

sed -E -i "s/(\"azle\": \")(.*)(\")/\1$VERSION\3/" package.json
npm install
# sed -E -i "s/(\"azle\": \")(.*)(\")/\1$VERSION\3/" package.json
# npm install

rm -rf node_modules
# rm -rf node_modules

cd $root_dir
done
# cd $root_dir
# done

git add --all
git commit -am "azle-bot automated release $VERSION"
git push origin $GITHUB_HEAD_REF
# git add --all
# git commit -am "azle-bot automated release $VERSION"
# git push origin $GITHUB_HEAD_REF

git tag $VERSION
git push origin $VERSION
# git tag $VERSION
# git push origin $VERSION

if [[ "$VERSION" == *"-rc."* ]];
then
gh release create "$VERSION" -t "$VERSION" --prerelease
else
gh release create "$VERSION" -t "$VERSION"
fi
# if [[ "$VERSION" == *"-rc."* ]];
# then
# gh release create "$VERSION" -t "$VERSION" --prerelease
# else
# gh release create "$VERSION" -t "$VERSION"
# fi
56 changes: 6 additions & 50 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,58 +43,14 @@ jobs:
name: Deploy release
# Only run this job if it's a release branch. This job will run instead of run-tests and will automatically publish another commit which will be tested
if: ${{ needs.determine-should-release.outputs.should-release == 'true' }}

needs:
- determine-should-release
- get-test-infos
runs-on: ubuntu-latest
env:

uses: ./.github/workflows/release_parallel.yml
secrets:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} # All commits must be verified
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref || github.ref }}
token: ${{ secrets.LASTMJS_GITHUB_TOKEN || github.token }}

- id: get-node-version
uses: ./.github/actions/get_node_version

- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get-node-version.outputs.node-version }}
registry-url: https://registry.npmjs.org
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Install curl
run: sudo apt-get install curl -y

- id: get-dfx-version
uses: ./.github/actions/get_dfx_version

- name: Install dfx
run: |
# Install dfx (Note: dfx must be installed before `npx azle` because the azle installation process requires dfx)
src/build/stable/commands/install_global_dependencies/install_dfx.sh ${{ steps.get-dfx-version.outputs.dfx-version }}
echo "$HOME/.local/share/dfx/bin" >> $GITHUB_PATH

- run: npm install

- name: Install global dependencies
run: |
AZLE_VERBOSE=true npx azle install-global-dependencies --rust --wasi2ic

# TODO we should use some Action-specific bot account
- name: Configure git for publishing release
run: |
git config --global user.name 'Jordan Last'
git config --global user.email '[email protected]'
git config --global commit.gpgsign true
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
git config --global user.signingkey C8B77BCBE16CD2B94B43F9C8757397B82D4ED7B0

- name: Publish release
run: |
BRANCH_NAME="${{ github.head_ref }}"
RELEASE_VERSION="${BRANCH_NAME:9}"
./.github/scripts/publish_github_action.sh $RELEASE_VERSION ${{ toJSON(needs.get-test-infos.outputs.test-infos) }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
LASTMJS_GITHUB_TOKEN: ${{ secrets.LASTMJS_GITHUB_TOKEN }}
218 changes: 218 additions & 0 deletions .github/workflows/release_parallel.yml
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
name: Parallel Release
on:
workflow_call:
secrets:
GPG_SIGNING_KEY:
required: true
GH_TOKEN:
required: true
NPM_TOKEN:
required: true
LASTMJS_GITHUB_TOKEN:
required: true

jobs:
prepare-release:
name: Prepare Release
runs-on: ubuntu-latest
env:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }} # All commits must be verified
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
outputs:
release-version: ${{ steps.get-version.outputs.release-version }}
test-infos: ${{ steps.get-test-infos.outputs.test-infos }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref || github.ref }}
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
token: ${{ secrets.LASTMJS_GITHUB_TOKEN || github.token }}
lastmjs marked this conversation as resolved.
Show resolved Hide resolved

- id: get-version
run: |
BRANCH_NAME="${{ github.event.pull_request.head.ref || github.ref_name }}"
RELEASE_VERSION="${BRANCH_NAME:9}"
echo "release-version=$RELEASE_VERSION" >> $GITHUB_OUTPUT

- id: get-node-version
uses: ./.github/actions/get_node_version

- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get-node-version.outputs.node-version }}
registry-url: https://registry.npmjs.org
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

- name: Install curl
run: sudo apt-get install curl -y

- id: get-dfx-version
uses: ./.github/actions/get_dfx_version

- name: Install dfx
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
run: |
# Install dfx (Note: dfx must be installed before `npx azle` because the azle installation process requires dfx)
src/build/stable/commands/install_global_dependencies/install_dfx.sh ${{ steps.get-dfx-version.outputs.dfx-version }}
echo "$HOME/.local/share/dfx/bin" >> $GITHUB_PATH

- run: npm install

- name: Install global dependencies
run: |
AZLE_VERBOSE=true npx azle install-global-dependencies --rust --wasi2ic

# TODO we should use some Action-specific bot account
- name: Configure git for publishing release
run: |
git config --global user.name 'Jordan Last'
git config --global user.email '[email protected]'
git config --global commit.gpgsign true
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
git config --global user.signingkey C8B77BCBE16CD2B94B43F9C8757397B82D4ED7B0

- name: Update version and build templates
run: |
VERSION=${{ steps.get-version.outputs.release-version }}
sed -E -i "s/(\"version\": \")(.*)(\")/\1$VERSION\3/" package.json
sed -E -i "s/(\"version\": \")(.*)(\")/\1$VERSION\3/" dfx_extension/extension.json
npm install
npx azle template
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
npx azle template --experimental

- name: Publish to npm
run: |
if [[ "${{ steps.get-version.outputs.release-version }}" == *"-rc."* ]]; then
npm publish --tag next
else
npm publish
fi

- id: get-test-infos
uses: ./.github/actions/get_test_infos
with:
directories: |
./examples
./tests

update-dependencies:
needs: prepare-release
name: Update ${{ matrix.test.name }}
runs-on: ubuntu-latest
env:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
fail-fast: false
matrix:
test: ${{ fromJson(needs.prepare-release.outputs.test-infos) }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref || github.ref }}
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
token: ${{ secrets.LASTMJS_GITHUB_TOKEN || github.token }}

- id: get-node-version
uses: ./.github/actions/get_node_version

- uses: actions/setup-node@v4
with:
node-version: ${{ steps.get-node-version.outputs.node-version }}

- id: get-dfx-version
uses: ./.github/actions/get_dfx_version

- name: Install dfx
run: |
# Install dfx (Note: dfx must be installed before `npx azle` because the azle installation process requires dfx)
src/build/stable/commands/install_global_dependencies/install_dfx.sh ${{ steps.get-dfx-version.outputs.dfx-version }}
echo "$HOME/.local/share/dfx/bin" >> $GITHUB_PATH

- name: Update dependencies
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
run: |
cd ${{ matrix.test.path }}
sed -E -i "s/(\"azle\": \")(.*)(\")/\1${{ needs.prepare-release.outputs.release-version }}\3/" package.json
npm install
rm -rf node_modules
lastmjs marked this conversation as resolved.
Show resolved Hide resolved

# TODO we should use some Action-specific bot account
- name: Commit and push changes
run: |
git config --global user.name 'Jordan Last'
git config --global user.email '[email protected]'
git config --global commit.gpgsign true
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
git config --global user.signingkey C8B77BCBE16CD2B94B43F9C8757397B82D4ED7B0
BRANCH_NAME="update-${{ needs.prepare-release.outputs.release-version }}-$(echo '${{ matrix.test.displayPath }}' | sed 's/\//-/g')"
git switch -c "$BRANCH_NAME"
git add --all
if ! git diff --cached --quiet; then
git commit -m "Update dependencies for ${{ matrix.test.displayPath }}"
else
echo "No changes to commit. Skipping commit and push."
fi
git push origin "$BRANCH_NAME"

finalize-release:
needs: [prepare-release, update-dependencies]
name: Finalize Release
runs-on: ubuntu-latest
env:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGNING_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref || github.ref }}
token: ${{ secrets.LASTMJS_GITHUB_TOKEN }}
fetch-depth: 0 # Fetch all history for all branches and tags

- name: Merge update branches
env:
PAT: ${{ secrets.LASTMJS_GITHUB_TOKEN }}
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
run: |
git config --global user.name 'Jordan Last'
git config --global user.email '[email protected]'
git config --global commit.gpgsign true
echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import
git config --global user.signingkey C8B77BCBE16CD2B94B43F9C8757397B82D4ED7B0

# Determine the current branch name
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo "Current branch: $CURRENT_BRANCH"

# Fetch all branches
git fetch --all

# List and merge update branches
for branch in $(git branch -r | grep "origin/update-${{ needs.prepare-release.outputs.release-version }}-" | sed 's/origin\///'); do
echo "Merging branch: $branch"
git fetch origin $branch:$branch
git merge --no-ff "$branch" -m "Merge $branch" || {
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
echo "Failed to merge $branch"
git merge --abort
continue
}

# Delete the remote branch after successful merge
git push origin --delete "$branch"
echo "Deleted remote branch: $branch"
done

# Push changes using PAT
echo "Pushing changes to $CURRENT_BRANCH"
git push origin HEAD:$CURRENT_BRANCH || {
echo "Failed to push changes"
exit 1
}

- name: Create release
run: |
VERSION=${{ needs.prepare-release.outputs.release-version }}
git tag $VERSION
git push origin $VERSION

if [[ "$VERSION" == *"-rc."* ]]; then
gh release create "$VERSION" -t "$VERSION" --prerelease
else
gh release create "$VERSION" -t "$VERSION"
fi
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
push:
branches:
- main
pull_request: # Runs on pull requests to any branch
pull_request:
lastmjs marked this conversation as resolved.
Show resolved Hide resolved

jobs:
determine-should-run-tests:
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"scripts": {
"typecheck": "tsc --noEmit",
"lint": "if [ \"$npm_config_fix\" ]; then eslint . --ext .js,.ts --cache --fix; else eslint . --ext .js,.ts --cache; fi",
"prepare": "husky install",
"prepare": "[ -f .git/hooks ] && husky install || true",
lastmjs marked this conversation as resolved.
Show resolved Hide resolved
"install": "cd dfx_extension && ./install.sh",
"test": "test/test.sh"
},
Expand Down
Loading