diff --git a/.github/workflows/changesets-pr.yaml b/.github/workflows/changesets-pr.yaml new file mode 100644 index 00000000000..c2fd2963cbe --- /dev/null +++ b/.github/workflows/changesets-pr.yaml @@ -0,0 +1,103 @@ +name: "Changesets PR" + +on: + push: + branches: + - master + - release/* + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + changesets-pr: + runs-on: ubuntu-latest + permissions: write-all + # First check ensures that the workflow runs only if the commit is NOT the changesets PR commit. + # Second check ensures that the workflow runs only after a commit is pushed into the branch, + # and not when the branch is created. + # This is to avoid running the workflow when a release/* branch is created. + if: | + startsWith(github.event.head_commit.message,'ci(release):') != true && + github.event.before != '0000000000000000000000000000000000000000' + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.ref }} + + - name: CI Setup + uses: ./.github/actions/ci-setup + + # if there are changesets present, package.json will be bumped + - name: Bump and Collect Versions + run: | + pnpm changeset version + echo "RELEASE_VERSION=v$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' packages/fuels/package.json)" >> $GITHUB_ENV + echo "FUEL_CORE_VERSION=$(cat ./internal/fuel-core/VERSION)" >> $GITHUB_ENV + echo "FORC_VERSION=$(cat ./internal/forc/VERSION)" >> $GITHUB_ENV + git reset --hard + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set branch name and changeset PR title + run: | + echo "CHANGESET_PR_TITLE=$(echo "ci(release): \`${{ env.RELEASE_VERSION }}\` @ \`${{ github.ref_name }}\`")" >> $GITHUB_ENV + + - name: Build + run: pnpm build + + - name: Create Release Pull Request + id: changesets + uses: FuelLabs/changesets-action@main + with: + publish: pnpm changeset:publish ${{ env.RELEASE_VERSION }} ${{ github.ref_name }} + version: pnpm changeset:version-with-docs + commit: "ci(release): versioning packages and changesets" + title: ${{ env.CHANGESET_PR_TITLE }} + createGithubReleases: aggregate + githubReleaseName: ${{ env.RELEASE_VERSION }} + githubTagName: ${{ env.RELEASE_VERSION }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_DEPLOY_TOKEN }} + + - name: Prettify changelog + run: pnpm changeset:update-changelog + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REF_NAME: ${{ github.ref_name }} + PUBLISHED: "false" + + # # Commenting out as we require permissions to trigger across repos + # - name: Update docs (nightly) + # if: github.ref_name == 'master' && env.SHOULD_DEPLOY_DOCS == 'true' + # uses: benc-uk/workflow-dispatch@v1 + # with: + # workflow: update-nightly.yml + # ref: master + # repo: FuelLabs/docs-hub + # token: ${{ secrets.GITHUB_TOKEN }} + + # Upload assets to S3 + - uses: unfor19/install-aws-cli-action@v1.0.7 + if: github.ref_name == 'master' + with: + version: 2 + verbose: false + arch: amd64 + rootdir: "" + workdir: "" + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + if: github.ref_name == 'master' + with: + role-to-assume: ${{ vars.AWS_ROLE_ARN }} + aws-region: ${{ vars.AWS_S3_REGION }} + + - name: Upload assets to s3 + if: github.ref_name == 'master' + run: | + aws s3 cp ./packages/account/src/assets/images/ s3://${{ vars.AWS_S3_BUCKET }}/providers/ --recursive diff --git a/.github/workflows/release-v2.yaml b/.github/workflows/release-v2.yaml new file mode 100644 index 00000000000..475c3043d1f --- /dev/null +++ b/.github/workflows/release-v2.yaml @@ -0,0 +1,128 @@ +name: "Release" + +on: + push: + branches: + - master + - release/* + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + release: + runs-on: ubuntu-latest + environment: npm-deploy + permissions: write-all + # First check ensures that the workflow runs only when the changesets PR commit is pushed into the branch. + # Second check ensures that the workflow runs only after a commit is pushed into the branch, + # and not when the branch is created. + # This is to avoid running the workflow when a release/* branch is created. + if: | + startsWith(github.event.head_commit.message,'ci(release):') && + github.event.before != '0000000000000000000000000000000000000000' + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.pull_request.head.ref }} + + - name: CI Setup + uses: ./.github/actions/ci-setup + + - name: Ensure NPM access + run: npm whoami + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_DEPLOY_TOKEN }} + + # if there are changesets present, package.json will be bumped + - name: Bump and Collect Versions + run: | + pnpm changeset version + echo "RELEASE_VERSION=v$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' packages/fuels/package.json)" >> $GITHUB_ENV + echo "FUEL_CORE_VERSION=$(cat ./internal/fuel-core/VERSION)" >> $GITHUB_ENV + echo "FORC_VERSION=$(cat ./internal/forc/VERSION)" >> $GITHUB_ENV + git reset --hard + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Build + run: pnpm build + + - name: Get latest release + run: | + LATEST_RELEASE=$(pnpm run --silent changeset:get-latest-release) + echo "LATEST_RELEASE=$LATEST_RELEASE" >> $GITHUB_ENV + + pnpm add --global semver + echo "RELEASE_VERSION_HIGHER_THAN_LATEST=$(semver $LATEST_RELEASE $RELEASE_VERSION | tail -n1 | grep ${RELEASE_VERSION#v} --silent && echo true || echo false)" >> $GITHUB_ENV + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish to npm + uses: FuelLabs/changesets-action@main + with: + publish: pnpm changeset:publish ${{ env.RELEASE_VERSION }} ${{ github.ref_name }} + version: pnpm changeset:version-with-docs + createGithubReleases: aggregate + githubReleaseName: ${{ env.RELEASE_VERSION }} + githubTagName: ${{ env.RELEASE_VERSION }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_DEPLOY_TOKEN }} + + - name: Prettify changelog + run: pnpm changeset:update-changelog + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_TAG: ${{ env.RELEASE_VERSION }} + PUBLISHED: "true" + REF_NAME: ${{ github.ref_name }} + LATEST_RELEASE: ${{ env.LATEST_RELEASE }} + RELEASE_VERSION_HIGHER_THAN_LATEST: ${{ env.RELEASE_VERSION_HIGHER_THAN_LATEST }} + + - name: Create PR to apply latest release to master + if: startsWith(github.ref_name, 'release/') && env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'true' + run: | + PR_TITLE_TEXT='apply `latest` release to `master`' + if [ ${RELEASE_VERSION#v} = "$(semver "$LATEST_VERSION" --increment minor)" ]; then + PR_TITLE="build!: $PR_TITLE_TEXT" + else + PR_TITLE="build: $PR_TITLE_TEXT" + fi + + PR_BODY='Automatically created when `latest` published release is newer than `master` due to publishing done via `release/*` branches.' + + gh pr create -B master -H $GITHUB_REF_NAME --title "$PR_TITLE" --body "$PR_BODY" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_VERSION: ${{ env.RELEASE_VERSION }} + LATEST_VERSION: ${{ env.LATEST_VERSION }} + + - name: Delete the release branch + # We check env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'false' + # because we don't want to delete the branch if it's used in the "Create PR to apply latest release to master" step above + if: startsWith(github.ref_name, 'release/') && env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'false' + run: git push origin --delete ${{ github.ref_name }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # # Commenting out as we require permissions to trigger across repos + # - name: Update docs (nightly) + # if: github.ref_name == 'master' && env.RELEASE_VERSION_HIGHER_THAN_LATEST == 'true' + # uses: benc-uk/workflow-dispatch@v1 + # with: + # workflow: update-nightly.yml + # ref: master + # repo: FuelLabs/docs-hub + # token: ${{ secrets.GITHUB_TOKEN }} + + # # Commenting out as we require permissions to trigger across repos + # - name: Notify migrations and disclosures of the new release (breaking changes) + # run: | + # curl -X POST \ + # -H "Accept: application/vnd.github.v3+json" \ + # -H "Authorization: token ${{ secrets.MIGRATIONS_RELEASE_TRIGGER_TOKEN }}" \ + # https://api.github.com/repos/FuelLabs/migrations-and-disclosures/dispatches \ + # -d '{"event_type":"update_versions"}' diff --git a/.github/workflows/testing-out-stuff.yaml b/.github/workflows/testing-out-stuff.yaml deleted file mode 100644 index ebf31f7c221..00000000000 --- a/.github/workflows/testing-out-stuff.yaml +++ /dev/null @@ -1,20 +0,0 @@ -name: "nedsalk / Testing out stuff" - -on: - push: - -concurrency: ${{ github.workflow }}-${{ github.ref }} - -jobs: - release: - name: "Testing out" - runs-on: ubuntu-latest - permissions: write-all - # Ensure that the workflow runs only after a commit is pushed into the branch - # and not when the branch is created. - # This is to avoid running the workflow when a release/* branch is created. - if: startsWith(github.event.head_commit.message,'ci(release):') && github.event.before != '0000000000000000000000000000000000000000' - - steps: - - name: log the whole push event - run: echo "${{ toJson(github.event) }}"