Skip to content

Commit 47487b5

Browse files
author
iexitdev
committed
ci(release): make npm publish reruns idempotent
1 parent fba7a41 commit 47487b5

1 file changed

Lines changed: 18 additions & 4 deletions

File tree

.github/workflows/publish.yml

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
- name: React Native CLI example
6969
run: npm run example:rn-cli:typecheck
7070

71-
- name: Verify packages are unpublished
71+
- name: Verify package publish state
7272
id: package
7373
run: |
7474
PACKAGE_NAME=$(node -p "require('./package.json').name")
@@ -95,8 +95,7 @@ jobs:
9595
WORKSPACE_VERSION=$(node -p "require('./${PACKAGE_JSON}').version")
9696
9797
if npm view "${WORKSPACE_NAME}@${WORKSPACE_VERSION}" version >/dev/null 2>&1; then
98-
echo "${WORKSPACE_NAME}@${WORKSPACE_VERSION} is already published"
99-
exit 1
98+
echo "${WORKSPACE_NAME}@${WORKSPACE_VERSION} is already published and will be skipped"
10099
fi
101100
done
102101
@@ -108,7 +107,22 @@ jobs:
108107
- name: Publish
109108
run: |
110109
for PACKAGE_DIR in $(node scripts/list-release-packages.mjs --publishable); do
111-
npm publish "${PACKAGE_DIR}" --access public --provenance --tag "${NPM_TAG}"
110+
PACKAGE_JSON="${PACKAGE_DIR}/package.json"
111+
PUBLISH_TARGET="./${PACKAGE_DIR}"
112+
if [ "${PACKAGE_DIR}" = "." ]; then
113+
PACKAGE_JSON="package.json"
114+
PUBLISH_TARGET="."
115+
fi
116+
117+
WORKSPACE_NAME=$(node -p "require('./${PACKAGE_JSON}').name")
118+
WORKSPACE_VERSION=$(node -p "require('./${PACKAGE_JSON}').version")
119+
120+
if npm view "${WORKSPACE_NAME}@${WORKSPACE_VERSION}" version >/dev/null 2>&1; then
121+
echo "Skipping ${WORKSPACE_NAME}@${WORKSPACE_VERSION}; already published"
122+
continue
123+
fi
124+
125+
npm publish "${PUBLISH_TARGET}" --ignore-scripts --access public --provenance --tag "${NPM_TAG}"
112126
done
113127
env:
114128
NPM_TAG: ${{ steps.package.outputs.npm_tag }}

0 commit comments

Comments
 (0)