Skip to content

Commit 46bb3d3

Browse files
authored
Merge pull request #1423 from EngineeringKiosk/andygrunwald/sync-awesome-software-engineering-movies
Add awesome-software-engineering-movies as third synced data source
2 parents 398d217 + d40b7e9 commit 46bb3d3

58 files changed

Lines changed: 1320 additions & 20 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: Sync awesome-software-engineering-movies
2+
3+
on:
4+
workflow_dispatch:
5+
repository_dispatch:
6+
types: [movie-list-update]
7+
8+
jobs:
9+
sync-awesome-software-engineering-movies:
10+
name: Sync awesome-software-engineering-movies from external repository
11+
runs-on: ubuntu-24.04
12+
defaults:
13+
run:
14+
working-directory: website-admin
15+
16+
steps:
17+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
18+
- uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6
19+
with:
20+
go-version: "1.26"
21+
22+
- name: Build
23+
run: make build
24+
25+
# Updates the Awesome Software Engineering Movies data
26+
# from https://github.com/EngineeringKiosk/awesome-software-engineering-movies
27+
- name: website-admin sync awesome-software-engineering-movies
28+
run: |
29+
./website-admin sync awesome-software-engineering-movies
30+
31+
# Commit results back to repository
32+
- name: Commit changes
33+
id: auto-commit
34+
uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v7.1.0
35+
env:
36+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37+
with:
38+
commit_message: "chore: Update the latest data from awesome-software-engineering-movies"
39+
branch: main
40+
commit_user_name: "GitHub Actions Bot"
41+
commit_user_email: "actions@github.com"
42+
commit_author: "GitHub Actions Bot <actions@github.com>"
43+
skip_push: true
44+
45+
- name: Push changes with retry
46+
if: steps.auto-commit.outputs.changes_detected == 'true'
47+
working-directory: ${{ github.workspace }}
48+
run: |
49+
max_retries=3
50+
for attempt in $(seq 1 $max_retries); do
51+
echo "Push attempt $attempt of $max_retries"
52+
if git push origin main; then
53+
echo "Push succeeded on attempt $attempt"
54+
exit 0
55+
fi
56+
echo "Push failed, pulling with rebase and retrying..."
57+
git pull --rebase origin main
58+
sleep $((attempt * 2))
59+
done
60+
echo "Push failed after $max_retries attempts"
61+
exit 1

src/components/Footer.astro

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ const year = new Date().getFullYear();
8888
<li class="mb-4">
8989
<a class="inline-block text-coolGray-500 hover:text-coolGray-600 font-medium" title="Spiele für Softwareentwickler:innen" href="/spiele-fuer-softwareentwickler/"> <span class="w-6 mr-2">👾</span> Spiele für Softwareentwickler:innen</a>
9090
</li>
91+
<li class="mb-4">
92+
<a class="inline-block text-coolGray-500 hover:text-coolGray-600 font-medium" title="Filme für Softwareentwickler:innen" href="/filme-fuer-softwareentwickler/"> <span class="w-6 mr-2">🎬</span> Filme für Softwareentwickler:innen</a>
93+
</li>
9194
<li class="mb-4">
9295
<a class="inline-block text-coolGray-500 hover:text-coolGray-600 font-medium" title="Supporte den Engineering Kiosk über Buy me a Coffee" href="https://buymeacoffee.com/engineeringkiosk"> <span class="w-6 mr-2">☕</span> Supporte uns mit Kaffee</a>
9396
</li>

src/components/Nav.astro

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ let latestEpisode = episodesToShow[0];
140140
<li>
141141
<a class="block py-3 px-4 text-coolGray-500 hover:text-coolGray-900 font-medium hover:bg-coolGray-50 rounded-md" href="/spiele-fuer-softwareentwickler/" title="Spiele für Softwareentwickler:innen"> 👾 Spiele für Softwareentwickler:innen</a>
142142
</li>
143+
<li>
144+
<a class="block py-3 px-4 text-coolGray-500 hover:text-coolGray-900 font-medium hover:bg-coolGray-50 rounded-md" href="/filme-fuer-softwareentwickler/" title="Filme für Softwareentwickler:innen"> 🎬 Filme für Softwareentwickler:innen</a>
145+
</li>
143146
</ul>
144147
<div class="flex flex-wrap">
145148
<div class="w-full mb-2">
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
import type { CollectionEntry } from 'astro:content';
3+
import { Image } from "astro:assets";
4+
import { URLify } from '../scripts/urlify.js';
5+
import { humanizeISO8601Duration } from '../scripts/duration.js';
6+
import { truncateDescription } from '../scripts/text.js';
7+
import TagBadge from '../components/TagBadge.astro';
8+
9+
export interface Props {
10+
movie: CollectionEntry<'awesome-software-engineering-movies'>;
11+
}
12+
13+
const { movie } = Astro.props;
14+
15+
let tags = [];
16+
if (movie.data.tags) {
17+
tags = movie.data.tags.map((element) => URLify(element));
18+
}
19+
20+
// Generate id based on the slug (slug is upstream-controlled and stable)
21+
const nameId = URLify(movie.data.slug);
22+
23+
const duration = humanizeISO8601Duration(movie.data.duration);
24+
const publishedDate = new Date(movie.data.publishedAt).toLocaleDateString('de-DE', { year: 'numeric', month: 'long', day: 'numeric' });
25+
const description = truncateDescription(movie.data.description);
26+
---
27+
28+
<section
29+
id={nameId.url}
30+
class="movie py-8 md:py-12 bg-white overflow-hidden"
31+
style="background-image: url('/images/elements/pattern-white.svg'); background-position: center;"
32+
>
33+
<div class="container px-4 mx-auto">
34+
<div class="flex flex-wrap lg:items-center -mx-4">
35+
<div class="w-full md:w-8/12 px-4 mb-16 md:mb-0">
36+
{
37+
tags.map((element) => (
38+
<TagBadge name={element.name} url={`/filme-fuer-softwareentwickler/${element.url}-filme/`} />
39+
))
40+
}
41+
42+
<h2 class="mb-8 text-4xl md:text-5xl leading-tight text-coolGray-900 font-bold tracking-tight">
43+
<a href={movie.data.link} class="hover:underline hover:text-yellow-500" title={`${movie.data.name} auf YouTube ansehen`} rel="noopener">
44+
{movie.data.name}
45+
</a>
46+
</h2>
47+
<p class="mb-6 text-lg md:text-xl text-coolGray-500 font-medium">
48+
{description}
49+
</p>
50+
<ul class="mb-4 text-lg md:text-xl text-coolGray-500 font-medium">
51+
<li class="pb-2">Dauer: {duration}</li>
52+
<li class="pb-2">Veröffentlicht: {publishedDate}</li>
53+
<li class="pb-2 space-x-2">Sprache:
54+
{movie.data.language.map((lang) => (
55+
<span class="inline-block px-2 py-0.5 text-sm bg-coolGray-100 rounded">{lang.toUpperCase()}</span>
56+
))}
57+
</li>
58+
</ul>
59+
60+
<div class="flex flex-wrap">
61+
<div class="mb-4 mt-4 mr-4">
62+
<a class="flex items-center" href={movie.data.link} title={`${movie.data.name} auf YouTube ansehen`} rel="noopener">
63+
<img class="w-8" src="/images/brands/youtube.svg" alt={`${movie.data.name} auf YouTube`} title={`${movie.data.name} auf YouTube`} />
64+
<span class="text-coolGray-500 text-lg m-2">YouTube</span>
65+
</a>
66+
</div>
67+
</div>
68+
</div>
69+
<div class="w-full md:w-4/12 px-4">
70+
<div class="relative mx-auto md:mr-0 max-w-max">
71+
<a href={movie.data.link} title={`${movie.data.name} auf YouTube ansehen`} rel="noopener">
72+
<Image class="rounded-2xl" src={movie.data.image} alt={`Film ${movie.data.name}`} title={`Film ${movie.data.name}`} loading="lazy" decoding="async" format="webp" quality={80} />
73+
</a>
74+
</div>
75+
</div>
76+
</div>
77+
</div>
78+
</section>

src/content.config.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,32 @@ const awesomeSoftwareEngineeringGamesCollection = defineCollection({
183183
}),
184184
});
185185

186+
// Schema for awesome-software-engineering-movies
187+
const awesomeSoftwareEngineeringMoviesCollection = defineCollection({
188+
loader: glob({ pattern: '**/[^_]*.json', base: './src/content/awesome-software-engineering-movies' }),
189+
schema: ({ image }) =>
190+
z.object({
191+
name: z.string(),
192+
slug: z.string(),
193+
title: z.string(),
194+
link: z.string().url(),
195+
videoID: z.string(),
196+
language: z.array(z.string()),
197+
tags: z.array(z.string()),
198+
description: z.string(),
199+
// ISO-8601 duration, e.g. "PT12M49S"
200+
duration: z.string(),
201+
// ISO-8601 timestamp, e.g. "2018-07-13T13:44:42Z"
202+
publishedAt: z.string(),
203+
channel: z.object({
204+
id: z.string(),
205+
title: z.string(),
206+
}),
207+
viewCount: z.number(),
208+
image: image(),
209+
}),
210+
});
211+
186212
// Export a single `collections` object to register your collection(s)
187213
export const collections = {
188214
podcast: podcastEpisodeCollection,
@@ -191,4 +217,5 @@ export const collections = {
191217
'meetup-rhine-ruhr': meetupRhineRuhrCollection,
192218
germantechpodcasts: germantechpodcastsCollection,
193219
'awesome-software-engineering-games': awesomeSoftwareEngineeringGamesCollection,
220+
'awesome-software-engineering-movies': awesomeSoftwareEngineeringMoviesCollection,
194221
};

src/content/awesome-software-engineering-movies/.gitkeep

Whitespace-only changes.
134 KB
Loading
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"channel": {
3+
"id": "UCsUalyRg43M8D60mtHe6YcA",
4+
"title": "CultRepo "
5+
},
6+
"description": "Born as an internal Google experiment - and initially brushed off by Gmail and Google Maps - AngularJS soon became a JavaScript sensation. But when internal pressures pushed the team towards a radical overhaul of the framework, the community felt left behind. What followed was years of attempts to bring Angular back to its former glory without breaking the world again.\n\nOnce considered dead and buried, Angular is back on everyone’s lips, pushing the boundaries of JavaScript and reaching new levels of importance at Google.\n\nFrom Angular 2 to Ivy, incorporating Signals to converging with Wiz and everything in between, get ready to explore the journey of Angular with a star-studded cast including Miško Hevery, Igor Minor, Brad Green, Minko Gechev, Sarah Drasner, Alex Rickabaugh, Addy Osmani, Ryan Carniato and Simona Cotin, among others.\n\n\nFilmmaker: Guillermo López\nExternal Contributor/Lead Producer: Stefan Kingham\n\nSponsors:\n* JetBrains (www.jetbrains.com)\n* HeroDevs (www.herodevs.com)\n* ClickUp (www.clickup.com)\n* AG Grid (www.ag-grid.com)\n* This Dot Labs (www.thisdot.co)\n\nFollow the amazing cast:\nMiško Hevery: https://x.com/mhevery\nBrad Green: https://x.com/bradlygreen\nIgor Minar: https://x.com/IgorMinar\nVojta Jina: https://x.com/vojtajina\nAaron Frost: https://x.com/aaronfrost\nAddy Osmani: https://x.com/addyosmani\nBen Lesh: https://x.com/BenLesh\nAdy Ngom: https://x.com/adyngom\nJan-Niklas Wortmann: https://x.com/niklas_wortmann\nZeb Evans: https://x.com/DJ_CURFEW\nTara Z. Manicsic: https://x.com/Tzmanics\nAlex Rickabaugh: https://x.com/synalx\nJeremy Elbourn: https://github.com/jelbourn\nKara Erickson: https://github.com/kara\nDoug Parker: https://github.com/dgp1130\nJessica Janiuk: https://github.com/jessicajaniuk\nMark Thompson: https://x.com/marktechson\nSarah Drasner: https://x.com/sarah_edo\nPawel Kozlowski: https://x.com/pkozlowski_os\nRyan Carniato: https://x.com/RyanCarniato\nWahbeh Qardaji: https://x.com/WabetQ\nMinko Gechev: https://x.com/mgechev\nSimona Cotin: https://x.com/simona_cotin\nBrandon Roberts: https://x.com/brandontroberts\nPiotr Tomiak: https://x.com/PiotrekTomiak\nJoe Eames: https://x.com/josepheames\n\nConnect with us:\nTwitter/X: https://x.com/CultRepo\nBlueSky: https://bsky.app/profile/cultrepo.bsky.social\nInstagram: https://www.instagram.com/cult.repo/\nWebsite: https://www.cultrepo.com/",
7+
"duration": "PT1H54S",
8+
"image": "./angular-the-documentary.jpg",
9+
"language": [
10+
"en"
11+
],
12+
"link": "https://www.youtube.com/watch?v=cRC9DlH45lA",
13+
"name": "Angular: The Documentary",
14+
"publishedAt": "2025-02-04T16:59:19Z",
15+
"slug": "angular-the-documentary",
16+
"tags": [
17+
"Frontend",
18+
"JavaScript",
19+
"Google",
20+
"Open Source",
21+
"History"
22+
],
23+
"title": "Angular: The Documentary | An origin story",
24+
"videoID": "cRC9DlH45lA",
25+
"viewCount": 120743
26+
}
157 KB
Loading
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"channel": {
3+
"id": "UCsUalyRg43M8D60mtHe6YcA",
4+
"title": "CultRepo "
5+
},
6+
"description": "This is the story of how one programmer's obsession with simplicity quietly reshaped how the software world thinks about time, immutability, and what it means to write code that lasts. From a sabbatical pet-project to the backbone of one of the world's largest fintechs and a global community that treats their language like a philosophy. This is the story of Clojure. \n\n---\n\nThis documentary wouldn't exist without the kind support of Nubank: https://building.nubank.com/engineering/\n\nThanks to Railway, our channel sponsor, for supporting all of our films:\nRailway is the all-in-one intelligent cloud provider ➡️ https://railway.com/?referralCode=cultrepo\n\n---\n\nThe Clojure Documentary features:\n\nAlessandra Sierra, Alex Miller, Chris Houser, David Nolen, Ed Wible, Eric Normand, Eric Thorsen, Lucas Cavalcanti, Michael Fogus, Nathan Marz, Rich Hickey, Steph Hickey, and Stuart Halloway.\n\nFilm Credits: \nDirected by: Cormac Dunne\nProduced by: Emma Tracey\nAdditional direction: Joey Bania \nMusic supervision and sound design: Tomás Malara\n\n---\n\nFor a full overview of all the papers, talks, essays, etc. that appear in the film, check this link: https://clojure.org/about/documentary\n\n\n---\n\nFollow us:\nX: x.com/CultRepo\nBluesky: cultrepo.bsky.social\nInstagram: www.instagram.com/cult.repo\nLinkedIn: https://www.linkedin.com/company/cult-repo",
7+
"duration": "PT1H6M20S",
8+
"image": "./clojure-the-documentary.jpg",
9+
"language": [
10+
"en"
11+
],
12+
"link": "https://www.youtube.com/watch?v=Y24vK_QDLFg",
13+
"name": "Clojure: The Documentary",
14+
"publishedAt": "2026-04-16T18:00:22Z",
15+
"slug": "clojure-the-documentary",
16+
"tags": [
17+
"Programming Languages",
18+
"Functional Programming",
19+
"Open Source",
20+
"History"
21+
],
22+
"title": "How one programmer's pet project changed how we think about software",
23+
"videoID": "Y24vK_QDLFg",
24+
"viewCount": 185369
25+
}

0 commit comments

Comments
 (0)