Repository navigation
Expand file tree
/
Copy pathpack.sh
More file actions
150 lines (121 loc) · 4.55 KB
/
Copy pathpack.sh
File metadata and controls
150 lines (121 loc) · 4.55 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/bash
set -e # Exit on error
echo "Starting deployment package script..."
# Copy deployment settings
echo "Copying deployment settings..."
cd src/IRAAS
cp appsettings.deploy.json appsettings.json
cd ../..
echo "Deployment settings copied."
# Set environment variables
export OCTOPUS_DEPLOY_FOLDER="./deploy_packages"
mkdir -p "$OCTOPUS_DEPLOY_FOLDER"
export DEBUG="*"
# Get version information
# Format: YYYY.M.D-RUNNUM-hash
DATE_VERSION=$(date +"%Y.%-m.%-d") # YYYY.M.D format (no leading zeros for month/day)
RUN_NUMBER=$GITHUB_RUN_NUMBER # Use GitHub run number
GIT_SHA=$(git rev-parse HEAD | cut -c1-7) # First 7 chars of git SHA
NAME="$DATE_VERSION-$RUN_NUMBER-$GIT_SHA"
echo "Package Version: $NAME"
NUGET_PACKAGE_NAME="IRAAS.$NAME"
# Setting GitHub Actions outputs
echo "RELEASE_NAME=$NAME" >> $GITHUB_OUTPUT
echo "NUGET_PACKAGE_NAME=$NUGET_PACKAGE_NAME" >> $GITHUB_OUTPUT
# First publish to get all dependencies
echo "Publishing application..."
dotnet publish src/IRAAS/IRAAS.csproj \
--configuration Release \
--output "./publish" \
--self-contained true
# copy deploy.sh to publish folder before nuget pack
cp src/IRAAS/deploy.sh ./publish/deploy.sh
# update version in nuspec file
cp src/IRAAS/Package.nuspec ./publish/
sed -i "s/<version>.*<\/version>/<version>$NAME<\/version>/" ./publish/Package.nuspec
# Then pack using the published output
echo "Creating NuGet package..."
dotnet pack src/IRAAS/IRAAS.csproj \
--configuration Release \
--output "$OCTOPUS_DEPLOY_FOLDER" \
--include-symbols \
-p:NuspecFile=../../publish/Package.nuspec \
-p:NuspecBasePath=../../publish \
-p:Version="$NAME" \
-p:PackageId="IRAAS" \
-p:AssemblyName="IRAAS"
# Push package to GitHub Packages NuGet repository
echo "Pushing package to GitHub Packages..."
PACKAGE_PATH="${OCTOPUS_DEPLOY_FOLDER}/${NUGET_PACKAGE_NAME}.nupkg"
echo "Expected package path: $PACKAGE_PATH"
if [ -f "$PACKAGE_PATH" ]; then
echo "Pushing package to GitHub Packages..."
dotnet nuget push "$PACKAGE_PATH" --api-key "$GHAUTH_TOKEN" --source "https://nuget.pkg.github.com/codeo-za/index.json" --skip-duplicate
PUSH_RESULT=$?
if [ $PUSH_RESULT -eq 0 ]; then
echo "✅ Package push succeeded"
else
echo "❌ Package push failed with exit code: $PUSH_RESULT"
exit $PUSH_RESULT
fi
else
echo "WARNING: Package not found at expected path."
FOUND_PACKAGE=$(find . -name "*.nupkg" -type f | head -n 1)
if [ -n "$FOUND_PACKAGE" ]; then
echo "Found alternative package at: $FOUND_PACKAGE"
# Extract actual package name for verification
ACTUAL_PACKAGE_NAME=$(basename "$FOUND_PACKAGE" .nupkg)
echo "Actual package name: $ACTUAL_PACKAGE_NAME"
echo "Aborting..."
exit 1
fi
fi
# Octopus deployment function
deploy_octopus() {
local project="$1"
local change_set="$2"
local deploy_to="$3"
if [ -z "$project" ]; then
echo "DeployOctopus Error: project is required."
exit 1
fi
if [ -z "$change_set" ]; then
echo "DeployOctopus Error: changeset is required."
exit 1
fi
# NB: Octopus CLI v2+ now uses env vars OCTOPUS_URL and OCTOPUS_API_KEY for auth
# Create release
echo "Creating Octopus release..."
OCTO_CREATE="octopus release create --project '$project' --release-notes 'GitHub Actions Automated Release ($change_set)' --version '$change_set' --package-version '$change_set'"
echo "Invoking: $OCTO_CREATE"
eval "$OCTO_CREATE"
if [ $? -ne 0 ]; then
echo "Error executing Octopus - Creating Release"
exit 1
fi
# Deploy release (only if environment specified)
if [ -n "$deploy_to" ]; then
echo "Deploying Octopus release..."
OCTO_DEPLOY="octopus release deploy --project '$project' --version '$change_set' --environment '$deploy_to'"
echo "Invoking: $OCTO_DEPLOY"
eval "$OCTO_DEPLOY"
if [ $? -ne 0 ]; then
echo "Error executing Octopus - Deploying Release"
exit 1
fi
fi
}
# Deploy to Octopus if not skipped
if [ "$SKIP_RELEASE" = "No" ]; then
echo "Deployment started..."
# Check if we have the required environment variables
if [ -z "$OCTOPUS_SERVER_URL" ] || [ -z "$OCTOPUS_SERVER_API_KEY" ]; then
echo "Error: OCTOPUS_SERVER_URL and OCTOPUS_SERVER_API_KEY must be set"
exit 1
fi
# Using the deploy_octopus function with environment variables
deploy_octopus "SPAR.IRAAS" "$NAME" "Azure - Silo Staging"
else
echo "Skipping Octopus deployment as requested."
fi
echo "Deployment package script completed."