Skip to content

Commit cbc1030

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

File tree

3 files changed

+78
-67
lines changed

3 files changed

+78
-67
lines changed

.github/workflows/build.yml

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
name: Build and run on GitHub Actions
22

33
on:
4-
push:
5-
branches: [ "**" ]
4+
workflow_dispatch:
5+
schedule:
6+
- cron: '41 4 * * *'
67

78
jobs:
89
build:
@@ -17,37 +18,20 @@ jobs:
1718
- name: Install dependencies
1819
run: sudo apt-get update && sudo apt-get install -y libglib2.0-dev
1920

20-
- name: Get settings into GitHub Actions
21-
run: |
22-
. ./settings.config
23-
echo "VZIC_RELEASE_NAME=$VZIC_RELEASE_NAME" >> $GITHUB_ENV
24-
25-
- name: Run build script
26-
run: ./build.sh
27-
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 }}
21+
- name: Configure git
4022
run: |
4123
git config --global user.name 'GitHub Actions'
4224
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
4625
47-
- name: Archive artifacts
48-
if: ${{ env.VZIC_PUSH_CHANGES == 1 }}
26+
- name: Run the build script
27+
run: ./build.sh
28+
29+
- name: Archive artifacts if any
4930
uses: actions/upload-artifact@v4
5031
with:
5132
name: tzdbics_${{ env.VZIC_RELEASE_NAME }}
5233
path: build/out/
53-
if-no-files-found: error
34+
if-no-files-found: ignore
35+
36+
- name: Push changes
37+
run: git push

build.sh

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

20-
echo "Building $VZIC_RELEASE_NAME"
20+
echo "Building vzic"
21+
eval "make -C '`pwd`/vzic' -B OLSON_DIR=tzdata $VZIC_MAKE_ARGS"
2122

22-
mkdir -p build/out
23+
if [ ! -d build ]; then mkdir -p build; fi
24+
if [ ! -d build/out ]; then mkdir -p build/out; fi
2325

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
26+
if [ -f tzdb_version.txt ]; then
27+
VZIC_CURRENT_RELEASE_NAME=$(cat tzdb_version.txt)
28+
echo "Start version set to $VZIC_CURRENT_RELEASE_NAME from tzdb_version.txt"
29+
else
30+
echo "tzdb_version.txt not found. Exiting."
31+
exit 1
2832
fi
2933

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
34+
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)
3535

36-
cp $VZIC_TZDATA_ARCHIVE_PATH build/out
37-
fi
36+
# Filter tzversions to skip versions before VZIC_CURRENT_RELEASE_NAME
37+
tzversions=$(echo "$tzversions" | awk -v start="$VZIC_CURRENT_RELEASE_NAME" '$0 > start')
3838

39-
echo "Building vzic"
40-
eval "make -C '`pwd`/build/vzic' -B OLSON_DIR=tzdata $VZIC_MAKE_ARGS"
39+
export VZIC_RELEASE_NAME=
4140

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"
41+
for version in $tzversions; do
4642

47-
export VZIC_ZONEINFO_NEW=`pwd`/build/zoneinfo
43+
export VZIC_RELEASE_NAME=$version
4844

49-
if [[ -d zoneinfo ]]; then
50-
export VZIC_ZONEINFO_MASTER=`pwd`/zoneinfo
45+
echo "Processing version: $version";
5146

52-
echo "Merging..."
53-
./build/vzic/vzic-merge.pl
47+
export VZIC_TZDATA_ARCHIVE_URL=$VZIC_TZDB_RELEASES_URL/tzdata$VZIC_RELEASE_NAME.tar.gz
48+
if [[ ${VZIC_TZDATA_ARCHIVE_URL} ]]; then
49+
echo "Downloading tzdata from $VZIC_TZDATA_ARCHIVE_URL"
50+
wget -q -O build/tzdata$VZIC_RELEASE_NAME.tar.gz $VZIC_TZDATA_ARCHIVE_URL
51+
export VZIC_TZDATA_ARCHIVE_PATH=build/tzdata$VZIC_RELEASE_NAME.tar.gz
52+
fi
5453

55-
# copy updated zones
56-
cp -r $VZIC_ZONEINFO_NEW/zones.* $VZIC_ZONEINFO_MASTER
54+
if [[ ${VZIC_TZDATA_ARCHIVE_PATH} ]]; then
55+
echo "Extracting new tzdata"
56+
if [ -d tzdata ]; then rm -rf tzdata; fi
57+
mkdir -p tzdata
58+
tar -xzf $VZIC_TZDATA_ARCHIVE_PATH -C tzdata
5759

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

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
95+
git commit -m "Update zoneinfo to $VZIC_RELEASE_NAME"
96+
done

settings.config

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

2-
VZIC_RELEASE_NAME=2024a
3-
42
# 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"
3+
VZIC_TAG_PREFIX="release_"
4+
VZIC_TZDB_RELEASES_URL="https://data.iana.org/time-zones/releases/"
65

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

0 commit comments

Comments
 (0)