Skip to content

Commit 622ae47

Browse files
committed
Merge branch 'main' into feature-ContentImages
2 parents 322502f + beee5a4 commit 622ae47

20 files changed

Lines changed: 946 additions & 132 deletions

.github/workflows/azure-dev.yml

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ jobs:
3636
steps:
3737
- name: Checkout
3838
uses: actions/checkout@v4
39+
3940
- name: Install azd
4041
uses: Azure/setup-azd@v2
42+
4143
- name: Setup .NET
4244
uses: actions/setup-dotnet@v4
4345
with:
@@ -52,10 +54,30 @@ jobs:
5254
--tenant-id "$Env:AZURE_TENANT_ID"
5355
shell: pwsh
5456

55-
5657
- name: Provision Infrastructure
5758
run: azd provision --no-prompt
5859

5960
- name: Deploy Application
6061
run: azd deploy --no-prompt
61-
62+
63+
- name: Refresh Web App Cache
64+
if: success()
65+
run: |
66+
echo "Refreshing web application cache..."
67+
# Wait a moment for the deployment to fully complete
68+
sleep 5
69+
70+
# Call the cache refresh endpoint with API key authentication
71+
response=$(curl -s -w "%{http_code}" -X POST "https://copilotthatjawn.com/api/cache/refresh" \
72+
-H "X-API-Key: ${{ secrets.CACHE_REFRESH_API_KEY }}" \
73+
-o /tmp/cache_response.json)
74+
75+
if [ "$response" = "200" ]; then
76+
echo "Cache refresh successful"
77+
cat /tmp/cache_response.json
78+
else
79+
echo "Cache refresh failed with HTTP status: $response"
80+
cat /tmp/cache_response.json || echo "No response body"
81+
# Don't fail the workflow if cache refresh fails - it's not critical
82+
echo "Continuing workflow despite cache refresh failure..."
83+
fi

.github/workflows/cleanup-container-images.yml

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,14 @@ jobs:
6666
fi
6767
6868
- name: Cleanup Old Container Images
69+
id: cleanup
6970
run: |
7071
acr_name="${{ steps.get-acr.outputs.acr_name }}"
7172
dry_run="${{ github.event.inputs.dry_run || 'false' }}"
7273
7374
if [ -z "$acr_name" ]; then
7475
echo "No Azure Container Registry found. Skipping cleanup."
76+
echo "purged_count=0" >> $GITHUB_OUTPUT
7577
exit 0
7678
fi
7779
@@ -83,6 +85,7 @@ jobs:
8385
8486
if [ -z "$repositories" ]; then
8587
echo "No repositories found in ACR. Nothing to clean up."
88+
echo "purged_count=0" >> $GITHUB_OUTPUT
8689
exit 0
8790
fi
8891
@@ -94,7 +97,7 @@ jobs:
9497
PURGE_FILTERS="$PURGE_FILTERS --filter '$repo:.*'"
9598
done
9699
97-
# Construct the purge command
100+
# Construct the purge command and capture the output
98101
PURGE_CMD="acr purge $PURGE_FILTERS --ago 0d --keep 5 --untagged"
99102
100103
if [ "$dry_run" = "true" ]; then
@@ -103,18 +106,41 @@ jobs:
103106
fi
104107
105108
echo "Running purge command..."
106-
# Set longer timeout (1 hour) for large registries
107-
az acr run \
109+
# Run the purge command and capture output
110+
purge_output=$(az acr run \
108111
--cmd "$PURGE_CMD" \
109112
--registry "$acr_name" \
110113
--timeout 3600 \
111-
/dev/null
114+
/dev/null)
112115
113116
exit_code=$?
117+
# Count purged images by looking for lines with "Deleted manifest" in the output
118+
purged_count=$(echo "$purge_output" | grep -c "Deleted manifest" || true)
119+
echo "purged_count=$purged_count" >> $GITHUB_OUTPUT
114120
115121
if [ $exit_code -eq 0 ]; then
116122
echo "✅ Cleanup process completed successfully!"
123+
echo "🧹 Images purged: $purged_count"
117124
else
118125
echo "❌ Cleanup process failed with exit code $exit_code"
119126
exit $exit_code
120-
fi
127+
fi
128+
129+
- name: Create Summary
130+
run: |
131+
purged_count="${{ steps.cleanup.outputs.purged_count }}"
132+
dry_run="${{ github.event.inputs.dry_run || 'false' }}"
133+
134+
echo "## Container Registry Cleanup Summary" >> $GITHUB_STEP_SUMMARY
135+
echo "- Registry: \`${{ steps.get-acr.outputs.acr_name }}\`" >> $GITHUB_STEP_SUMMARY
136+
echo "- Date: $(date -u '+%Y-%m-%d %H:%M:%S UTC')" >> $GITHUB_STEP_SUMMARY
137+
138+
if [ "$dry_run" = "true" ]; then
139+
echo "- Mode: 🔍 **DRY RUN** (no images were actually deleted)" >> $GITHUB_STEP_SUMMARY
140+
echo "- Images that would be purged: **$purged_count**" >> $GITHUB_STEP_SUMMARY
141+
else
142+
echo "- Mode: ✅ **Production Run**" >> $GITHUB_STEP_SUMMARY
143+
echo "- Images purged: **$purged_count**" >> $GITHUB_STEP_SUMMARY
144+
fi
145+
146+
echo "- Retention Policy: Keep 5 most recent images per repository" >> $GITHUB_STEP_SUMMARY

.github/workflows/content-sync.yml

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,38 @@ jobs:
2727
- uses: actions/setup-dotnet@v4
2828
with:
2929
dotnet-version: '9.0.x'
30+
31+
- name: Cache NuGet packages
32+
uses: actions/cache@v4
33+
with:
34+
path: ~/.nuget/packages
35+
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj', '**/packages.lock.json') }}
36+
restore-keys: |
37+
${{ runner.os }}-nuget-
38+
39+
- name: Cache .NET build outputs
40+
uses: actions/cache@v4
41+
with:
42+
path: |
43+
**/bin
44+
**/obj
45+
key: ${{ runner.os }}-dotnet-build-${{ hashFiles('**/*.csproj', '**/*.cs', '**/Program.cs') }}
46+
restore-keys: |
47+
${{ runner.os }}-dotnet-build-
48+
49+
- name: Restore dependencies
50+
run: dotnet restore ContentLoader/ContentLoader.csproj
3051

3152
- name: Build ContentLoader
32-
run: dotnet build ContentLoader/ContentLoader.csproj --configuration Release
53+
run: dotnet build ContentLoader/ContentLoader.csproj --configuration Release --no-restore
3354

3455
- name: Upload Content
3556
id: upload-content
3657
env:
3758
AZURE_STORAGE_CONNECTION_STRING: ${{ secrets.CONTENT_STORAGE_CONNECTION_STRING }}
3859
run: |
3960
# Capture the output from the ContentLoader
40-
output=$(dotnet run --project ContentLoader/ContentLoader.csproj --configuration Release -- Content 2>&1)
61+
output=$(dotnet run --project ContentLoader/ContentLoader.csproj --configuration Release --no-build -- Content 2>&1)
4162
echo "$output" # Extract sync summary numbers using awk for more reliable parsing
4263
added=$(echo "$output" | awk '/Added:/ {print $2}')
4364
updated=$(echo "$output" | awk '/Updated:/ {print $2}')
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
title: "Use Copilot as Your Personal Checklist and Interviewer"
3+
description: "Learn how to leverage Copilot to generate step-by-step checklists and interview you through complex processes for better productivity and organization."
4+
category: "Productivity"
5+
tags: ["copilot", "productivity", "workflow", "checklist", "process"]
6+
difficulty: "Beginner"
7+
datePublished: "2025-06-17"
8+
author: "Copilot That Jawn"
9+
featured: false
10+
---
11+
12+
One powerful way to boost your productivity with Copilot is to ask it to generate a checklist or to interview you step-by-step for a task. Instead of just requesting information or a solution, try prompts like:
13+
14+
- "Give me a checklist for launching a new product."
15+
- "Interview me to gather requirements for a client presentation."
16+
- "Walk me through the steps to plan a successful team meeting."
17+
- "Create a project management checklist for my team."
18+
- "Help me plan a budget proposal by asking me questions."
19+
20+
## Why This Works
21+
22+
Copilot will respond with a structured list or a series of questions, helping you:
23+
24+
- **Clarify your process** - Break down complex tasks into manageable steps
25+
- **Avoid missing steps** - Ensure nothing falls through the cracks
26+
- **Stay organized** - Follow a logical sequence of actions
27+
- **Learn best practices** - Discover industry-standard approaches
28+
- **Document your workflow** - Create reusable processes for your team
29+
30+
## Example in Action
31+
32+
**Your Prompt:** "Interview me to gather requirements for planning a company event."
33+
34+
**Copilot's Response:**
35+
36+
1. What type of event are you planning (conference, celebration, training, etc.)?
37+
2. How many attendees are you expecting?
38+
3. What's your budget range for this event?
39+
4. Do you have a preferred date or timeline?
40+
5. What are your venue requirements (location, capacity, amenities)?
41+
6. Are there any special accommodations or accessibility needs?
42+
43+
## Pro Tips
44+
45+
- **After Copilot generates a checklist**, you can ask it to expand on any step, provide additional resources, or even help you create action items for each step
46+
- **Use follow-up questions** like "What's the best practice for step 3?" or "Can you give me a template for step 5?"
47+
- **Save successful checklists** as templates for future projects
48+
- **Use your microphone and dictation** - Instead of typing long responses to Copilot's interview questions, use voice input to speak your thoughts naturally. This makes the conversation flow more like a real consultation and helps you articulate ideas quickly without getting bogged down in typing
49+
- **Think out loud with voice** - When Copilot asks clarifying questions, use voice dictation to brainstorm and explore ideas verbally. You can refine and edit afterward, but speaking helps you capture thoughts faster than typing
50+
- **Treat Copilot like a collaborative partner** - let it guide you, ask follow-up questions, and help you think through your work like a seasoned professional
51+
52+
This approach is especially useful for complex workflows, onboarding new team members, project planning, event management, or when you want to ensure best practices are followed consistently across your organization.

0 commit comments

Comments
 (0)