Skip to content

Commit e9a00f7

Browse files
committed
Rework build to automatically detect and process new tzdb versions.
1 parent a06a2ec commit e9a00f7

File tree

3 files changed

+73
-64
lines changed

3 files changed

+73
-64
lines changed

.github/workflows/build.yml

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,20 @@ jobs:
1717
- name: Install dependencies
1818
run: sudo apt-get update && sudo apt-get install -y libglib2.0-dev
1919

20-
- name: Get settings into GitHub Actions
20+
- name: Configure git
2121
run: |
22-
. ./settings.config
23-
echo "VZIC_RELEASE_NAME=$VZIC_RELEASE_NAME" >> $GITHUB_ENV
22+
git config --global user.name 'GitHub Actions'
23+
git config --global user.email '[email protected]'
2424
25-
- name: Run build script
25+
- name: Run the build script
2626
run: ./build.sh
2727

28-
- name: Check, whether anything has changed.
29-
run: |
30-
if [[ `git status --porcelain` ]]; then
31-
echo "File changes detected. Will commit and push."
32-
echo "VZIC_PUSH_CHANGES=1" >> $GITHUB_ENV
33-
else
34-
echo "No file changes detected."
35-
echo "VZIC_PUSH_CHANGES=0" >> $GITHUB_ENV
36-
fi
37-
38-
- name: Commit and push changes
39-
if: ${{ env.VZIC_PUSH_CHANGES == 1 }}
28+
- name: Push changes
4029
run: |
41-
git config --global user.name 'GitHub Actions'
42-
git config --global user.email '[email protected]'
43-
git add .
44-
git commit -am "Update tzdata and zoneinfo to version $VZIC_RELEASE_NAME."
45-
git push
30+
git push --tags
4631
47-
- name: Archive artifacts
48-
if: ${{ env.VZIC_PUSH_CHANGES == 1 }}
32+
- name: Archive artifacts if any
4933
uses: actions/upload-artifact@v4
5034
with:
5135
name: tzdbics_${{ env.VZIC_RELEASE_NAME }}
52-
path: build/out/
53-
if-no-files-found: error
36+
if-no-files-found: ignore

build.sh

Lines changed: 63 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -17,52 +17,78 @@ set -e
1717
# read settings file
1818
. ./settings.config
1919

20-
echo "Building $VZIC_RELEASE_NAME"
20+
if ! git diff-index --quiet HEAD --; then
21+
echo "Error: Git worktree is not clean. Please commit or stash your changes before proceeding."
22+
exit 1
23+
fi
2124

22-
mkdir -p build/out
25+
echo "Building vzic"
26+
eval "make -C '`pwd`/vzic' -B OLSON_DIR=tzdata $VZIC_MAKE_ARGS"
2327

24-
if [[ ${VZIC_TZDATA_ARCHIVE_URL} ]]; then
25-
echo "Downloading tzdata from $VZIC_TZDATA_ARCHIVE_URL"
26-
wget -q -O build/tzdata$VZIC_RELEASE_NAME.tar.gz $VZIC_TZDATA_ARCHIVE_URL
27-
export VZIC_TZDATA_ARCHIVE_PATH=build/tzdata$VZIC_RELEASE_NAME.tar.gz
28-
fi
28+
tzversions=$(wget -q -O - $VZIC_TZDB_RELEASES_URL | grep -oP 'tzdata\K[\d]+[a-z](?=\.tar\.gz)' | awk '{print ($0 ~ /^9/ ? "19" $0 : $0)}' | sort | uniq)
2929

30-
if [[ ${VZIC_TZDATA_ARCHIVE_PATH} ]]; then
31-
echo "Extracting new tzdata"
32-
if [ -d tzdata ]; then rm -rf tzdata; fi
33-
mkdir -p tzdata
34-
tar -xzf $VZIC_TZDATA_ARCHIVE_PATH -C tzdata
30+
# Filter tzversions to skip versions before VZIC_START_RELEASE_NAME
31+
tzversions=$(echo "$tzversions" | awk -v start="$VZIC_START_RELEASE_NAME" '$0 >= start')
3532

36-
cp $VZIC_TZDATA_ARCHIVE_PATH build/out
37-
fi
33+
for version in $tzversions; do
3834

39-
echo "Building vzic"
40-
eval "make -C '`pwd`/build/vzic' -B OLSON_DIR=tzdata $VZIC_MAKE_ARGS"
35+
export VZIC_RELEASE_NAME=$version
36+
tagname="release_$VZIC_RELEASE_NAME"
4137

42-
echo "Running vzic"
43-
if [ -d build/zoneinfo ]; then rm -r build/zoneinfo; fi
44-
mkdir -p build/zoneinfo
45-
eval "./build/vzic/vzic --olson-dir tzdata --output-dir build/zoneinfo $VZIC_INVOCATION_ARGS"
38+
if git rev-parse "$tagname" >/dev/null 2>&1; then
39+
echo "Tag $tagname already exists. Skipping version $version."
40+
continue
41+
fi
4642

47-
export VZIC_ZONEINFO_NEW=`pwd`/build/zoneinfo
43+
echo "Processing version: $version";
4844

49-
if [[ -d zoneinfo ]]; then
50-
export VZIC_ZONEINFO_MASTER=`pwd`/zoneinfo
45+
export VZIC_TZDATA_ARCHIVE_URL=$VZIC_TZDB_RELEASES_URL/tzdata$VZIC_RELEASE_NAME.tar.gz
46+
if [[ ${VZIC_TZDATA_ARCHIVE_URL} ]]; then
47+
echo "Downloading tzdata from $VZIC_TZDATA_ARCHIVE_URL"
48+
wget -q -O build/tzdata$VZIC_RELEASE_NAME.tar.gz $VZIC_TZDATA_ARCHIVE_URL
49+
export VZIC_TZDATA_ARCHIVE_PATH=build/tzdata$VZIC_RELEASE_NAME.tar.gz
50+
fi
5151

52-
echo "Merging..."
53-
./build/vzic/vzic-merge.pl
52+
if [[ ${VZIC_TZDATA_ARCHIVE_PATH} ]]; then
53+
echo "Extracting new tzdata"
54+
if [ -d tzdata ]; then rm -rf tzdata; fi
55+
mkdir -p tzdata
56+
tar -xzf $VZIC_TZDATA_ARCHIVE_PATH -C tzdata
5457

55-
# copy updated zones
56-
cp -r $VZIC_ZONEINFO_NEW/zones.* $VZIC_ZONEINFO_MASTER
58+
cp $VZIC_TZDATA_ARCHIVE_PATH build/out
59+
fi
5760

58-
else
59-
cp -r "$VZIC_ZONEINFO_NEW" zoneinfo
60-
export VZIC_ZONEINFO_MASTER=`pwd`/zoneinfo
61-
echo "No master zoneinfo configured. The new zoneinfo will not be merged and kept as is."
62-
fi
61+
echo "Running vzic"
62+
if [ -d build/zoneinfo ]; then rm -r build/zoneinfo; fi
63+
mkdir -p build/zoneinfo
64+
eval "./vzic/vzic --olson-dir tzdata --output-dir build/zoneinfo $VZIC_INVOCATION_ARGS"
65+
66+
export VZIC_ZONEINFO_NEW=`pwd`/build/zoneinfo
67+
68+
if [[ -d zoneinfo ]]; then
69+
export VZIC_ZONEINFO_MASTER=`pwd`/zoneinfo
70+
71+
echo "Merging..."
72+
./vzic/vzic-merge.pl
73+
74+
# copy updated zones
75+
cp -r $VZIC_ZONEINFO_NEW/zones.* $VZIC_ZONEINFO_MASTER
76+
77+
else
78+
cp -r "$VZIC_ZONEINFO_NEW" zoneinfo
79+
export VZIC_ZONEINFO_MASTER=`pwd`/zoneinfo
80+
echo "No master zoneinfo configured. The new zoneinfo will not be merged and kept as is."
81+
fi
82+
83+
echo "Creating output archive"
84+
VZIC_OUT_TAR="`pwd`/build/out/zoneinfo-$VZIC_RELEASE_NAME.tar.gz"
85+
pushd $VZIC_ZONEINFO_MASTER
86+
tar -czf "$VZIC_OUT_TAR" *
87+
popd
88+
89+
git add .
90+
91+
git commit -m "Update zoneinfo to $VZIC_RELEASE_NAME"
92+
git tag -a "$tagname" -m "Release $VZIC_RELEASE_NAME"
6393

64-
echo "Creating output archive"
65-
VZIC_OUT_TAR="`pwd`/build/out/zoneinfo-$VZIC_RELEASE_NAME.tar.gz"
66-
pushd $VZIC_ZONEINFO_MASTER
67-
tar -czf "$VZIC_OUT_TAR" *
68-
popd
94+
done

settings.config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

2-
VZIC_RELEASE_NAME=2024a
2+
VZIC_START_RELEASE_NAME=2000f
33

44
# The source tzdata is downloaded from this URL.
5-
VZIC_TZDATA_ARCHIVE_URL="https://data.iana.org/time-zones/releases/tzdata$VZIC_RELEASE_NAME.tar.gz"
5+
VZIC_TZDB_RELEASES_URL="https://data.iana.org/time-zones/releases/"
66

77
VZIC_PRODID="-//github.com/libical/vzic//NONSGML ICS//EN"
88
VZIC_TZID_PREFIX="/github.com/libical/tzdbics/%D_$VZIC_RELEASE_NAME/"

0 commit comments

Comments
 (0)