Repository navigation
132 lines (111 loc) · 4.68 KB
/
Copy pathdeprecate.yml
File metadata and controls
132 lines (111 loc) · 4.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: Deprecate Package
on:
workflow_dispatch:
inputs:
version:
description: 'Version to deprecate (e.g., 1.0.0 or @adobe/aio-lib-telemetry@1.0.0)'
required: true
type: string
message:
description: 'Deprecation message'
required: true
type: string
default: 'This version has been deprecated. Please upgrade to the latest version.'
unpublish:
description: 'Also unpublish the version (WARNING: Irreversible and discouraged by npm)'
required: false
type: boolean
default: false
dry_run:
description: 'Dry run (simulate without making actual changes)'
required: false
type: boolean
default: false
jobs:
deprecate:
name: Deprecate Package Version
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: 'lts/*'
registry-url: 'https://registry.npmjs.org'
- name: Validate and normalize version
id: version
run: |
echo "Version input: ${{ inputs.version }}"
echo "Message: ${{ inputs.message }}"
echo "Also unpublish: ${{ inputs.unpublish }}"
echo "Dry run: ${{ inputs.dry_run }}"
VERSION="${{ inputs.version }}"
# Validate version format (major.minor.patch only)
# Regex source: Simplified semantic versioning pattern matching X.Y.Z format
# Reference: https://semver.org/ (basic version core: MAJOR.MINOR.PATCH)
if [[ "$VERSION" =~ ^(@[a-z0-9-]+/[a-z0-9-]+@)?[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
# Valid format
if [[ "$VERSION" =~ ^@.+/.+@ ]]; then
# Already has package name
VALIDATED_VERSION="$VERSION"
else
# Add package name
VALIDATED_VERSION="@adobe/aio-lib-telemetry@$VERSION"
fi
else
echo "::error::Invalid version format. Expected: 'X.Y.Z' (e.g., '1.0.0') or '@adobe/aio-lib-telemetry@X.Y.Z'"
echo "::error::Pre-release versions and build metadata are not supported."
exit 1
fi
echo "Validated version: $VALIDATED_VERSION"
echo "VALIDATED_VERSION=$VALIDATED_VERSION" >> "$GITHUB_OUTPUT"
- name: Deprecate package version
run: |
VERSION="${{ steps.version.outputs.VALIDATED_VERSION }}"
if [[ "${{ inputs.dry_run }}" == "true" ]]; then
echo "🔍 DRY RUN: Would deprecate: $VERSION"
echo "🔍 DRY RUN: With message: ${{ inputs.message }}"
else
echo "Deprecating: $VERSION"
npm deprecate "$VERSION" "${{ inputs.message }}"
fi
env:
NODE_AUTH_TOKEN: ${{ secrets.ADOBE_BOT_NPM_TOKEN }}
- name: Unpublish package version
if: ${{ inputs.unpublish }}
run: |
VERSION="${{ steps.version.outputs.VALIDATED_VERSION }}"
if [[ "${{ inputs.dry_run }}" == "true" ]]; then
echo "🔍 DRY RUN: Would unpublish: $VERSION"
echo "⚠️ WARNING: This action would be irreversible and is discouraged by npm."
echo "This action is irreversible and discouraged by npm."
echo "Consider using deprecate instead."
else
echo "Unpublishing: $VERSION"
npm unpublish "$VERSION"
fi
env:
NODE_AUTH_TOKEN: ${{ secrets.ADOBE_BOT_NPM_TOKEN }}
- name: Verify action
run: |
VERSION="${{ steps.version.outputs.VALIDATED_VERSION }}"
# Extract just the version number
VERSION_NUM="${VERSION##*@}"
if [[ "${{ inputs.dry_run }}" == "true" ]]; then
echo "🔍 DRY RUN completed successfully - no actual changes were made"
echo "Would have deprecated version $VERSION_NUM"
echo "📝 With message: ${{ inputs.message }}"
if [[ "${{ inputs.unpublish }}" == "true" ]]; then
echo "Would have also unpublished version $VERSION_NUM"
fi
else
echo "Action completed successfully"
echo "✅ Version $VERSION_NUM has been deprecated"
echo "📝 Message: ${{ inputs.message }}"
if [[ "${{ inputs.unpublish }}" == "true" ]]; then
echo "✅ Version $VERSION_NUM has also been unpublished"
fi
fi