Skip to content

Update United States holidays: update Puerto Rico holidays #10286

Update United States holidays: update Puerto Rico holidays

Update United States holidays: update Puerto Rico holidays #10286

Workflow file for this run

name: CI/CD
on:
merge_group:
pull_request:
branches:
- dev
- main
- v1
push:
branches:
- dev
- main
- v1
tags:
- 'v*'
workflow_dispatch:
workflow_run:
workflows: ['Update pre-commit hooks']
branches:
- update-pre-commit-hooks
types:
- completed
env:
FORCE_COLOR: 1
concurrency:
cancel-in-progress: ${{ !contains(fromJSON('["dev", "main", "v1"]'), github.ref_name) }}
group: ${{ github.repository }}-${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
jobs:
pre-commit:
name: Run pre-commit
runs-on: ubuntu-24.04
steps:
- name: Check out repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Install uv
uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a
with:
python-version: '3.14'
version: '0.9.16'
- name: Install Python
run: uv python install "$UV_PYTHON"
- name: Run pre-commit
run: uv tool run --with pre-commit-uv pre-commit run --show-diff-on-failure --color=always --all-files
code-ql:
name: CodeQL
needs:
- pre-commit
permissions:
security-events: write
runs-on: ubuntu-24.04
steps:
- name: Check out repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Initialize CodeQL
uses: github/codeql-action/init@cf1bb45a277cb3c205638b2cd5c984db1c46a412
with:
languages: python
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@cf1bb45a277cb3c205638b2cd5c984db1c46a412
with:
category: '/language:python'
test:
name: Test Python ${{ matrix.python-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
needs:
- pre-commit
strategy:
matrix:
os:
- macos-latest
- ubuntu-latest
- windows-latest
python-version:
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- '3.14'
steps:
- name: Check out repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Install uv
uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a
with:
python-version: ${{ matrix.python-version }}
version: '0.9.16'
- name: Install Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}
- name: Install dependencies
run: uv sync --frozen --no-dev --group tests --link-mode=copy
- name: Run tests
run: make test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de
with:
token: ${{ secrets.CODECOV_TOKEN }}
build:
name: Build distribution
needs: test
runs-on: ubuntu-24.04
steps:
- name: Check out repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Install uv
uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a
with:
python-version: '3.14'
version: '0.9.16'
- name: Install Python
run: uv python install "$UV_PYTHON"
- name: Install dependencies
run: uv sync --frozen --no-default-groups --no-install-project --group build --link-mode=copy
- name: Build distribution
run: make package
- name: Upload package artifacts
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
with:
name: dist
path: dist
- name: Set version
if: startsWith(github.event.ref, 'refs/tags/v')
run: echo "VERSION=$(echo ${{ github.ref_name }} | sed 's/^v//')" >> $GITHUB_ENV
- name: Generate SBOM
if: startsWith(github.event.ref, 'refs/tags/v')
run: make sbom > holidays-${{ env.VERSION }}-sbom.json
- name: Upload SBOM
if: startsWith(github.event.ref, 'refs/tags/v')
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
with:
name: sbom
path: holidays-${{ env.VERSION }}-sbom.json
test-build:
name: Test build on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
needs: build
strategy:
matrix:
os:
- macos-latest
- ubuntu-latest
- windows-latest
steps:
- name: Check out repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Install uv
uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a
with:
python-version: '3.14'
version: '0.9.16'
- name: Install Python
shell: bash
run: uv python install "$UV_PYTHON"
- name: Get package artifacts
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: dist
path: dist
- name: Run tests
shell: bash
run: |
uv sync --frozen --no-default-groups --no-install-project --group tests --link-mode=copy
rm -rf holidays
uv pip install dist/*.whl --link-mode=copy
uv run --no-sync pytest --dist loadscope --numprocesses auto tests/countries tests/financial
uv pip uninstall holidays
uv pip install dist/*.tar.gz --link-mode=copy
uv run --no-sync pytest --dist loadscope --numprocesses auto tests/countries tests/financial
test-docs:
name: Test docs build
runs-on: ubuntu-24.04
needs: test
steps:
- name: Check out repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
- name: Install uv
uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a
with:
python-version: '3.14'
version: '0.9.16'
- name: Install Python
run: uv python install "$UV_PYTHON"
- name: Install dependencies
run: uv sync --frozen --no-default-groups --no-install-project --group docs --link-mode=copy
- name: Build docs
run: make doc
publish-main:
name: Publish generated artifacts
if: |
github.repository == 'vacanza/holidays' &&
github.event_name == 'push' &&
startsWith(github.event.ref, 'refs/tags/v')
environment: main
needs:
- test-build
- test-docs
permissions:
contents: write
id-token: write
runs-on: ubuntu-24.04
steps:
- name: Download package artifacts
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: dist
path: dist
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e
sign-artifacts:
name: Create SHA1 checksums and Sigstore signatures
runs-on: ubuntu-24.04
needs:
- publish-main
permissions:
id-token: write
steps:
- name: Download package artifacts
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: dist
path: dist
- name: Compute SHA1 checksums
run: |
cd dist
for file in *; do
sha1sum "$file" > "$file.sha1"
done
- name: Sign the files using Sigstore
uses: sigstore/gh-action-sigstore-python@a5caf349bc536fbef3668a10ed7f5cd309a4b53d
with:
inputs: |
./dist/*.tar.gz
./dist/*.whl
- name: Upload package dist and signatures
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
with:
name: signed-artifacts
path: dist
update-github-release:
name: Update GitHub release with SBOM and signed artifacts
runs-on: ubuntu-24.04
needs:
- sign-artifacts
permissions:
contents: write
steps:
- name: Download SBOM
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: sbom
- name: Download package dist and signatures
uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
with:
name: signed-artifacts
path: dist
- name: Update Github release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload --repo vacanza/holidays ${{ github.ref_name }} dist/*
gh release upload --repo vacanza/holidays ${{ github.ref_name }} holidays-*-sbom.json