Skip to content

Commit

Permalink
chore: migrate pr + next package publishing to GitHub Packages (#…
Browse files Browse the repository at this point in the history
…3639)

* chore: update PR release to GitHub packages

* chore: release PR

* chore: correct terminology

* chore: maybe works

* chore: attempt different token

* pls pickup .npmrc

* chore: set registry for changeset

* fix: envs

* remove env

* chore: finalize GitHub package publishing

* disable whoami

* chore: need to alter the changeset config

* pls

* chore: need to update all the changesets

* chore: added better comment

* chore: removed (potentially unneeded envs)

* chore: re-added envs

* chore: fix ci name

* chore: removed potentially unneeded config

* fix: names of organisation

* chore: removed failing command

* chore: remove redundant action

* chore: changing the script name

* chore: readd registry-url

* fix: script name

* pls deploy

* chore: finalise PR

* chore: changeset

* chore: rollback unneeded changes

* disable release

---------

Co-authored-by: Nedim Salkić <nedim.salkic@fuel.sh>
  • Loading branch information
petertonysmith94 and nedsalk authored Feb 7, 2025
1 parent 6668336 commit 95255c8
Show file tree
Hide file tree
Showing 8 changed files with 180 additions and 50 deletions.
4 changes: 4 additions & 0 deletions .changeset/angry-pianos-boil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
---

chore: migrate `pr` + `next` package publishing to GitHub Packages
5 changes: 4 additions & 1 deletion .github/actions/ci-setup/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ inputs:
pnpm-version:
description: "PNPM version"
default: 9.4.0
registry-url:
description: "Registry URL"
default: "https://registry.npmjs.org"
runs:
using: "composite"
steps:
Expand All @@ -19,7 +22,7 @@ runs:
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
registry-url: "https://registry.npmjs.org"
registry-url: ${{ inputs.registry-url }}

- name: Setup PNPM
uses: pnpm/action-setup@v4
Expand Down
41 changes: 0 additions & 41 deletions .github/actions/pr-release/action.yaml

This file was deleted.

71 changes: 71 additions & 0 deletions .github/workflows/pr-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Release to @pr-<number> tag on GitHub Packages
on:
pull_request:
workflow_dispatch:

jobs:
release-pr:
name: "Release PR to GitHub Packages"
runs-on: ubuntu-latest
# comment out if:false to enable release PR to GitHub Packages
if: false
permissions: write-all
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: Create .npmrc
run: |
cat << EOF > "$HOME/.npmrc"
//npm.pkg.github.com/:_authToken=$GITHUB_TOKEN
@FuelLabs:registry=https://npm.pkg.github.com
EOF
env:
HOME: ${{ github.workspace }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Build
run: pnpm build

- name: Release to @pr-${{ github.event.pull_REQUEST.NUMBER }} tag on GitHub Packages
id: release
shell: bash
run: |
pnpm changeset:next
pnpm changeset version --snapshot pr-${{ github.event.pull_REQUEST.NUMBER }}
changetsets=$(pnpm changeset publish --tag pr-${{ github.event.pull_REQUEST.NUMBER }})
published_version=$(echo "$changetsets" | grep -oP '@\K([0-9]+\.){2}[0-9]+-pr-${{ github.event.pull_REQUEST.NUMBER }}-\d+' | head -1)
echo "published_version=$published_version" >> $GITHUB_OUTPUT
env:
NPM_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
HOME: ${{ github.workspace }}
npm_config_registry: "https://npm.pkg.github.com"

- uses: mshick/add-pr-comment@v2
with:
message: |
This PR is published in GitHub Packages with version **${{ steps.release.outputs.published_version }}**
Install using the following command:
```bash
pnpm add @fuellabs/fuels@${{ steps.release.outputs.published_version }}
```
Or update your package.json:
```json
"dependencies": {
"@fuellabs/fuels": "${{ steps.release.outputs.published_version }}"
}
```
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
19 changes: 16 additions & 3 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,18 @@ jobs:
LATEST_RELEASE: ${{ env.LATEST_RELEASE }}
RELEASE_VERSION_HIGHER_THAN_LATEST: ${{ env.RELEASE_VERSION_HIGHER_THAN_LATEST }}

- name: Release to @next tag on npm
- name: Create .npmrc
if: github.ref_name == 'master' && steps.changesets.outputs.published != 'true'
run: |
cat << EOF > "$HOME/.npmrc"
//npm.pkg.github.com/:_authToken=$GITHUB_TOKEN
@FuelLabs:registry=https://npm.pkg.github.com
EOF
env:
HOME: ${{ github.workspace }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Release to @next tag on GitHub Packages
if: github.ref_name == 'master' && steps.changesets.outputs.published != 'true'
run: |
git checkout master
Expand All @@ -105,12 +116,14 @@ jobs:
fi
pnpm changeset:next
git add .changeset/fuel-labs-ci.md
pnpm changeset version --snapshot next
pnpm changeset publish --tag next
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_DEPLOY_TOKEN }}
NPM_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
HOME: ${{ github.workspace }}
npm_config_registry: "https://npm.pkg.github.com"

# ensure docs are always deployed after merge of changeset PR
- name: Get the last commit message and set env vars
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
"prettier:format": "prettier --write packages --write apps/docs",
"verify:package-exports": "tsx ./scripts/verify-package-exports",
"changeset:publish": "tsx ./scripts/changeset/changeset-publish",
"changeset:next": "tsx ./scripts/changeset/changeset-next",
"changeset:next": "tsx ./scripts/changeset/changeset-next.mts",
"changeset:version-with-docs": "tsx ./scripts/changeset/changeset-version-with-docs",
"changeset:update-changelog": "tsx ./scripts/changeset/update-changelog.mts",
"changeset:get-latest-release": "tsx ./scripts/changeset/get-latest-release.mts",
Expand Down
84 changes: 84 additions & 0 deletions scripts/changeset/changeset-next.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { execSync } from "child_process";
import { readFileSync, writeFileSync } from "fs";
import { globSync } from "glob";

const CHANGESET_CONFIG_PATH = ".changeset/config.json";
const GITHUB_ORGANIZATION_SCOPE = "@FuelLabs";

const formatPackageName = (name: string) =>
`${GITHUB_ORGANIZATION_SCOPE}/${name.replace("@fuel-ts/", "")}`;

const formatPackageJsonContents = (contents: { name: string }) => ({
...contents,
// We need to add the GitHub organization name to the scope to publish to GitHub
// We also need to strip off and prefixes (e.g. '@fuel-ts/' -> '')
name: formatPackageName(contents.name),
// We also need a repository field to publish to GitHub
repository: "https://github.com/FuelLabs/fuels-ts",
});

/**
* Gather all the package.json files to be published
*/
const packages = globSync("**/package.json")
// Read in the package.json file
.map((fileName) => {
const packageJson = JSON.parse(readFileSync(fileName, "utf-8"));
return {
path: fileName,
contents: packageJson,
};
})
// Filter out private packages
.filter((pkg) => !pkg.contents.private);

// Format the package contents to be used to publish to GitHub
packages
.map((pkg) => ({
path: pkg.path,
contents: formatPackageJsonContents(pkg.contents),
}))
.forEach((pkg) => {
// Write the formatted package.json files
writeFileSync(pkg.path, JSON.stringify(pkg.contents, null, 2));
// Add the formatted package.json files to the git index
execSync(`git add ${pkg.path}`);
});

/**
* Update the changeset config to include the FuelLabs organization scope
*/
const changesetConfigContents = JSON.parse(
readFileSync(CHANGESET_CONFIG_PATH, "utf-8"),
);
const changesetConfig = {
...changesetConfigContents,
fixed: [[`${GITHUB_ORGANIZATION_SCOPE}/*`]],
};
writeFileSync(CHANGESET_CONFIG_PATH, JSON.stringify(changesetConfig, null, 2));
execSync(`git add ${CHANGESET_CONFIG_PATH}`);

/**
* Update all pre-existing changeset package scopes
*/
const packageNames = packages.map((pkg) => pkg.contents.name).join("|");
const regex = new RegExp(packageNames, "g");
globSync(".changeset/*.md")
.map((fileName) => {
const contents = readFileSync(fileName, "utf-8");
return {
path: fileName,
contents,
};
})
.forEach((pkg) => {
writeFileSync(pkg.path, pkg.contents.replace(regex, formatPackageName));
execSync(`git add ${pkg.path}`);
});

/**
* Add a changeset for the next `fuels` version
*/
const output = `---\n"${GITHUB_ORGANIZATION_SCOPE}/fuels": patch\n---\n\nincremental\n`;
writeFileSync(".changeset/fuel-labs-ci.md", output);
execSync(`git add .changeset/fuel-labs-ci.md`);
4 changes: 0 additions & 4 deletions scripts/changeset/changeset-next.ts

This file was deleted.

0 comments on commit 95255c8

Please sign in to comment.