Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,13 @@ jobs:
} else {
Write-Host "ℹ️ No Access databases found in source directory."
}
Write-Host "Access ACCDE folders found: ${{ steps.build_vba.outputs.access-de-folders }}"
Write-Host "Has Access ACCDE: ${{ steps.build_vba.outputs.has-access-de }}"
if ("${{ steps.build_vba.outputs.has-access-de }}" -eq "True") {
Write-Host "✅ Access ACCDE target(s) detected and will be compiled!"
} else {
Write-Host "ℹ️ No Access ACCDE targets found in source directory."
}
- name: "Upload Build Artifact"
uses: actions/upload-artifact@v7
id: "upload"
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added

- Build support for Microsoft Access `.accde` (compiled) databases. Source folders whose name ends in `.accde` are detected, built from source, and compiled to an ACCDE.
- New `app-config` input to pass an application config file (database properties, procedures to run, modules/references to remove) through to `msaccess-vcs-build` for Access builds.
- New `vcs-url` and `vcs-sha` inputs to select the `msaccess-vcs-addin` release used for Access builds and optionally verify its asset digest.

### Changed

- Access builds now delegate compile and prepare steps to `msaccess-vcs-build@v1.1.0` (previously `v1.0.1`).

## [2.0.0] - 2026-02-18

## Breaking changes
Expand Down
20 changes: 16 additions & 4 deletions Main.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ $processedFolders = 0
$successfulBuilds = 0
$accessFolders = @()
$hasAccessDatabase = $false
$accessDeFolders = @()
$hasAccessDe = $false

function Get-OfficeApp {
param (
Expand Down Expand Up @@ -118,9 +120,15 @@ foreach ($folder in $folders) {
Write-Host "Office application: $app"

if ($app -eq "Access") {
Write-Host "Access database detected. Adding to Access folders list..."
$accessFolders += "${SourceDir}/${folder}"
$hasAccessDatabase = $true
if ($fileExtension -eq "accde") {
Write-Host "Access ACCDE target detected. Adding to Access ACCDE folders list..."
$accessDeFolders += "${SourceDir}/${folder}"
$hasAccessDe = $true
} else {
Write-Host "Access database detected. Adding to Access folders list..."
$accessFolders += "${SourceDir}/${folder}"
$hasAccessDatabase = $true
}
Write-Host "Access is not supported in the main build process. Skipping build but tracking for separate processing..."
continue
}
Expand Down Expand Up @@ -170,10 +178,14 @@ Write-Host "Setting GitHub Actions outputs..."
"office-apps=$($officeApps -join '|||')" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
"access-folders=$($accessFolders -join '|||')" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
"has-access-database=$hasAccessDatabase" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
"access-de-folders=$($accessDeFolders -join '|||')" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8
"has-access-de=$hasAccessDe" | Out-File -FilePath $env:GITHUB_OUTPUT -Append -Encoding utf8

Write-Host "Build process completed successfully!"
Write-Host "Processed folders: $processedFolders"
Write-Host "Successful builds: $successfulBuilds"
Write-Host "Office apps used: $($officeApps -join ' ||| ')"
Write-Host "Access folders found: $($accessFolders -join ' ||| ')"
Write-Host "Has Access database: $hasAccessDatabase"
Write-Host "Has Access database: $hasAccessDatabase"
Write-Host "Access ACCDE folders found: $($accessDeFolders -join ' ||| ')"
Write-Host "Has Access ACCDE: $hasAccessDe"
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ The main script is contained in `Main.ps1` and will perform the following action
* Excel (.xlsm, .xlam, .xlsb and .xltm)
* Word (.docm and .dotm)
* PowerPoint (.pptm, .ppam and .potm)
* Access[^2] (.accdb)
* Access[^2] (.accdb and .accde)

## Why?

Expand All @@ -50,7 +50,6 @@ Depending on the reaction of the community, I might add support for:
- Allow unit tests to run on Microsoft Access files
- More complex file structure using [vbaproject.toml](https://github.com/vbapm/core/blob/main/README.md#manifest-vbaprojecttoml) configuration file (manifest file)
- Signature of the VBA Project (to facilitate distribution)
- Microsoft Access .accde file format

[^1]: All modern Office file formats for Word, PowerPoint and Excel are actually .zip files in disguse. Access is an exception in this case since the content of an Access Database (.accdb) is different and in order to do version control you'd have to use a tool like [msaccess-vcs-addin](https://github.com/joyfullservice/msaccess-vcs-addin).
[^2]: For Access, this GitHub Action makes use of msaccess-vcs-addin via [msaccess-vcs-build](https://github.com/AccessCodeLib/msaccess-vcs-build) meaning that you need to use the addin in Access to create the source material for the build.
37 changes: 35 additions & 2 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,21 @@ inputs:
To force a specific app instead, use the options: Excel, Word, PowerPoint or Access.
required: false
default: 'automatic'
app-config:
description: |
Application config file passed to msaccess-vcs-build for Access builds
(set database properties, run procedures, remove modules/references, etc.).
Empty = no prepare step.
required: false
default: ''
vcs-url:
description: 'msaccess-vcs-addin release URL used to build/compile Access databases'
required: false
default: 'https://api.github.com/repos/joyfullservice/msaccess-vcs-addin/releases/tags/v5.0.1'
vcs-sha:
description: 'Expected SHA256 digest of the vcs-addin asset (optional; empty = skip verification)'
required: false
default: ''

runs:
using: "composite"
Expand All @@ -44,8 +59,20 @@ runs:
source-dir-values: "${{ steps.run_vba_build.outputs.access-folders }}"
target-dir: "${{ inputs['source-dir'] }}/out"
compile: "false"
vcs-url: "https://api.github.com/repos/josef-poetzl/msaccess-vcs-addin/releases/tags/v4.1.2-build"
expected-sha256: "03e61d7c569cee55a960b23695d9128c79f2b21bff658ea52bc3849a9e351de8"
app-config: "${{ inputs['app-config'] }}"
vcs-url: "${{ inputs['vcs-url'] }}"
vcs-sha: "${{ inputs['vcs-sha'] }}"
- name: "Build Access ACCDE (if detected)"
if: steps.run_vba_build.outputs.has-access-de == 'True'
id: "build_access_de"
uses: ./subactions/msaccess-vcs-build-all
with:
source-dir-values: "${{ steps.run_vba_build.outputs.access-de-folders }}"
target-dir: "${{ inputs['source-dir'] }}/out"
compile: "true"
app-config: "${{ inputs['app-config'] }}"
vcs-url: "${{ inputs['vcs-url'] }}"
vcs-sha: "${{ inputs['vcs-sha'] }}"
outputs:
processed-folders:
description: "Number of folders processed during the build"
Expand All @@ -62,6 +89,12 @@ outputs:
has-access-database:
description: "Boolean indicating if any Access database folders were found"
value: ${{ steps.run_vba_build.outputs.has-access-database }}
access-de-folders:
description: "Comma-separated list of Access ACCDE source folders"
value: ${{ steps.run_vba_build.outputs.access-de-folders }}
has-access-de:
description: "Boolean indicating if any Access ACCDE folders were found"
value: ${{ steps.run_vba_build.outputs.has-access-de }}
first-access-folder:
description: "The first Access database folder that was processed (if any)"
value: ${{ steps.extract_access_folder.outputs.first-access-folder }}
33 changes: 21 additions & 12 deletions subactions/msaccess-vcs-build-all/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,16 @@ inputs:
description: 'Whether to compile the Access database'
required: false
default: "false"
app-config:
description: 'Application config file (set database properties, run procedures, remove modules/references, etc.)'
required: false
default: ""
vcs-url:
description: 'VCS URL for the Access database add-in'
required: false
default: "https://api.github.com/repos/josef-poetzl/msaccess-vcs-addin/releases/tags/v4.1.2-build"
expected-sha256:
description: 'Expected SHA256 digest of the VCS asset (optional - if not provided, will be fetched from release)'
default: "https://api.github.com/repos/joyfullservice/msaccess-vcs-addin/releases/tags/v5.0.1"
vcs-sha:
description: 'Expected SHA256 digest of the vcs-addin asset (optional - if not provided, verification is skipped)'
required: false

runs:
Expand Down Expand Up @@ -46,13 +50,13 @@ runs:
exit 1
fi

if [[ -n "${{ inputs.expected-sha256 }}" ]]; then
echo "Expected SHA256: ${{ inputs.expected-sha256 }}"
if [[ -n "${{ inputs.vcs-sha }}" ]]; then
echo "Expected SHA256: ${{ inputs.vcs-sha }}"
echo "Actual SHA256: $ACTUAL_SHA"

if [[ "${{ inputs.expected-sha256 }}" != "$ACTUAL_SHA" ]]; then
if [[ "${{ inputs.vcs-sha }}" != "$ACTUAL_SHA" ]]; then
echo "Error: SHA256 digest mismatch!"
echo "Expected: ${{ inputs.expected-sha256 }}"
echo "Expected: ${{ inputs.vcs-sha }}"
echo "Actual: $ACTUAL_SHA"
exit 1
fi
Expand All @@ -65,45 +69,50 @@ runs:

- name: Call action 0
if: ${{ fromJSON(steps.parse.outputs.count) > 0 }}
uses: AccessCodeLib/msaccess-vcs-build@c4bfcb0958016f6523a2c7119ac434116a76e84a # v1.0.1
uses: AccessCodeLib/msaccess-vcs-build@da38fda0d878d93cf8be66846da0084d27ea97f1 # v1.1.0
with:
source-dir: ${{ steps.parse.outputs.value0 }}
target-dir: ${{ inputs.target-dir }}
compile: ${{ inputs.compile }}
app-config: ${{ inputs.app-config }}
vcs-url: ${{ inputs.vcs-url }}

- name: Call action 1
if: ${{ fromJSON(steps.parse.outputs.count) > 1 }}
uses: AccessCodeLib/msaccess-vcs-build@c4bfcb0958016f6523a2c7119ac434116a76e84a # v1.0.1
uses: AccessCodeLib/msaccess-vcs-build@da38fda0d878d93cf8be66846da0084d27ea97f1 # v1.1.0
with:
source-dir: ${{ steps.parse.outputs.value1 }}
target-dir: ${{ inputs.target-dir }}
compile: ${{ inputs.compile }}
app-config: ${{ inputs.app-config }}
vcs-url: ${{ inputs.vcs-url }}

- name: Call action 2
if: ${{ fromJSON(steps.parse.outputs.count) > 2 }}
uses: AccessCodeLib/msaccess-vcs-build@c4bfcb0958016f6523a2c7119ac434116a76e84a # v1.0.1
uses: AccessCodeLib/msaccess-vcs-build@da38fda0d878d93cf8be66846da0084d27ea97f1 # v1.1.0
with:
source-dir: ${{ steps.parse.outputs.value2 }}
target-dir: ${{ inputs.target-dir }}
compile: ${{ inputs.compile }}
app-config: ${{ inputs.app-config }}
vcs-url: ${{ inputs.vcs-url }}

- name: Call action 3
if: ${{ fromJSON(steps.parse.outputs.count) > 3 }}
uses: AccessCodeLib/msaccess-vcs-build@c4bfcb0958016f6523a2c7119ac434116a76e84a # v1.0.1
uses: AccessCodeLib/msaccess-vcs-build@da38fda0d878d93cf8be66846da0084d27ea97f1 # v1.1.0
with:
source-dir: ${{ steps.parse.outputs.value3 }}
target-dir: ${{ inputs.target-dir }}
compile: ${{ inputs.compile }}
app-config: ${{ inputs.app-config }}
vcs-url: ${{ inputs.vcs-url }}

- name: Call action 4
if: ${{ fromJSON(steps.parse.outputs.count) > 4 }}
uses: AccessCodeLib/msaccess-vcs-build@c4bfcb0958016f6523a2c7119ac434116a76e84a # v1.0.1
uses: AccessCodeLib/msaccess-vcs-build@da38fda0d878d93cf8be66846da0084d27ea97f1 # v1.1.0
with:
source-dir: ${{ steps.parse.outputs.value4 }}
target-dir: ${{ inputs.target-dir }}
compile: ${{ inputs.compile }}
app-config: ${{ inputs.app-config }}
vcs-url: ${{ inputs.vcs-url }}
Loading
Loading