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
5 changes: 4 additions & 1 deletion .github/workflows/local-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,17 @@ jobs:
max_attempts: 3
command: npm i -g firebase-tools@14

# ✅ Ensure Data Connect SDKs are generated before emulator tests
- name: Generate Data Connect SDKs
run: firebase dataconnect:sdk:generate

# Build packages before testing
- name: Build packages
run: pnpm turbo build

# Verify build outputs
- name: Verify build outputs
run: |
# Check all packages for dist directories
MISSING_BUILDS=""
for PKG_DIR in packages/*; do
if [ -d "$PKG_DIR" ] && [ -f "$PKG_DIR/package.json" ]; then
Expand Down
24 changes: 9 additions & 15 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ jobs:
max_attempts: 3
command: npm i -g firebase-tools@latest

# ✅ Ensure Data Connect SDKs are generated before emulator tests
- name: Generate Data Connect SDKs
run: firebase dataconnect:sdk:generate

- name: Run tests with emulator
run: pnpm test:emulator

Expand All @@ -118,7 +122,6 @@ jobs:
- name: Verify build outputs
run: |
echo "Checking build outputs..."
# Check all packages for dist directories
MISSING_BUILDS=""
for PKG_DIR in packages/*; do
if [ -d "$PKG_DIR" ] && [ -f "$PKG_DIR/package.json" ]; then
Expand All @@ -128,27 +131,22 @@ jobs:
fi
fi
done

if [ -n "$MISSING_BUILDS" ]; then
echo "❌ Build outputs missing for: $MISSING_BUILDS"
exit 1
fi

echo "✅ All build outputs verified"

- name: Validate changesets
run: |
set -e
CHANGESET_FILES=$(find .changeset -name "*.md" -type f ! -name "README.md" 2>/dev/null || true)

if [ -z "$CHANGESET_FILES" ]; then
echo "❌ No changesets found!"
echo ""
echo "Please create changesets locally with: pnpm changeset"
echo "Changesets should be created during development, not during release."
exit 1
fi

CHANGESET_COUNT=$(echo "$CHANGESET_FILES" | wc -l | tr -d ' ')
echo "✅ Found $CHANGESET_COUNT changeset(s):"
echo "$CHANGESET_FILES" | while read -r file; do
Expand Down Expand Up @@ -182,22 +180,19 @@ jobs:
done

echo "📦 Version changes that would be applied:"
# Configure git user for changeset version command
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

# Save current HEAD reference before making changes

ORIGINAL_HEAD=$(git rev-parse HEAD)
# Create a temporary branch for dry run with unique name
FALLBACK_ID=${GITHUB_RUN_ID:-$RANDOM$RANDOM}
TEMP_BRANCH="dry-run-temp-$FALLBACK_ID"
git checkout -b "$TEMP_BRANCH"
pnpm changeset version

echo ""
echo "🔍 Changed files:"
git diff --name-status "$ORIGINAL_HEAD"

echo ""
echo "🔍 Package version changes:"
VERSION_CHANGES=$(git diff "$ORIGINAL_HEAD" -- '**/package.json' | grep -E "^[+-]\s*\"version\"" || true)
Expand All @@ -206,10 +201,9 @@ jobs:
else
echo "$VERSION_CHANGES"
fi

# Clean up

git checkout -
git branch -D "$TEMP_BRANCH"

echo ""
echo "✅ Dry run completed successfully"
48 changes: 48 additions & 0 deletions .github/workflows/repro.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Repro

on:
workflow_dispatch:

jobs:
repro:
runs-on: ubuntu-latest
timeout-minutes: 15

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Setup Java 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

- name: Install Firebase CLI
run: npm i -g firebase-tools@latest

- name: Create minimal firebase.json (dataconnect only)
run: |
cat > firebase.json <<'JSON'
{
"emulators": {
"dataconnect": { "port": 9155 }
}
}
JSON
cat firebase.json

- name: Repro — start Data Connect emulator
run: |
set -euxo pipefail
firebase --version
firebase emulators:exec \
--project demo-test-project \
--only dataconnect \
--debug \
"node -e \"setTimeout(()=>{}, 15000)\""
4 changes: 4 additions & 0 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,10 @@ jobs:
fi
echo "✅ All build outputs verified"

# ✅ Generate Data Connect SDK before running emulators
- name: Generate Data Connect SDKs
run: firebase dataconnect:sdk:generate

# Run tests with all emulators (auth, firestore, and data-connect)
- name: Run tests with emulator
run: pnpm test:emulator
66 changes: 33 additions & 33 deletions dataconnect-sdk/js/default-connector/esm/index.esm.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,6 @@ export const connectorConfig = {
location: 'us-central1'
};

export const listMoviesRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'ListMovies');
}
listMoviesRef.operationName = 'ListMovies';

export function listMovies(dc) {
return executeQuery(listMoviesRef(dc));
}

export const getMovieByIdRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMovieById', inputVars);
}
getMovieByIdRef.operationName = 'GetMovieById';

export function getMovieById(dcOrVars, vars) {
return executeQuery(getMovieByIdRef(dcOrVars, vars));
}

export const getMetaRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMeta');
}
getMetaRef.operationName = 'GetMeta';

export function getMeta(dc) {
return executeQuery(getMetaRef(dc));
}

export const createMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
Expand Down Expand Up @@ -94,3 +61,36 @@ export function deleteMeta(dcOrVars, vars) {
return executeMutation(deleteMetaRef(dcOrVars, vars));
}

export const listMoviesRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'ListMovies');
}
listMoviesRef.operationName = 'ListMovies';

export function listMovies(dc) {
return executeQuery(listMoviesRef(dc));
}

export const getMovieByIdRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMovieById', inputVars);
}
getMovieByIdRef.operationName = 'GetMovieById';

export function getMovieById(dcOrVars, vars) {
return executeQuery(getMovieByIdRef(dcOrVars, vars));
}

export const getMetaRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMeta');
}
getMetaRef.operationName = 'GetMeta';

export function getMeta(dc) {
return executeQuery(getMetaRef(dc));
}

72 changes: 36 additions & 36 deletions dataconnect-sdk/js/default-connector/index.cjs.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,42 +7,6 @@ const connectorConfig = {
};
exports.connectorConfig = connectorConfig;

const listMoviesRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'ListMovies');
}
listMoviesRef.operationName = 'ListMovies';
exports.listMoviesRef = listMoviesRef;

exports.listMovies = function listMovies(dc) {
return executeQuery(listMoviesRef(dc));
};

const getMovieByIdRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMovieById', inputVars);
}
getMovieByIdRef.operationName = 'GetMovieById';
exports.getMovieByIdRef = getMovieByIdRef;

exports.getMovieById = function getMovieById(dcOrVars, vars) {
return executeQuery(getMovieByIdRef(dcOrVars, vars));
};

const getMetaRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMeta');
}
getMetaRef.operationName = 'GetMeta';
exports.getMetaRef = getMetaRef;

exports.getMeta = function getMeta(dc) {
return executeQuery(getMetaRef(dc));
};

const createMovieRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
Expand Down Expand Up @@ -102,3 +66,39 @@ exports.deleteMetaRef = deleteMetaRef;
exports.deleteMeta = function deleteMeta(dcOrVars, vars) {
return executeMutation(deleteMetaRef(dcOrVars, vars));
};

const listMoviesRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'ListMovies');
}
listMoviesRef.operationName = 'ListMovies';
exports.listMoviesRef = listMoviesRef;

exports.listMovies = function listMovies(dc) {
return executeQuery(listMoviesRef(dc));
};

const getMovieByIdRef = (dcOrVars, vars) => {
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMovieById', inputVars);
}
getMovieByIdRef.operationName = 'GetMovieById';
exports.getMovieByIdRef = getMovieByIdRef;

exports.getMovieById = function getMovieById(dcOrVars, vars) {
return executeQuery(getMovieByIdRef(dcOrVars, vars));
};

const getMetaRef = (dc) => {
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
dcInstance._useGeneratedSdk();
return queryRef(dcInstance, 'GetMeta');
}
getMetaRef.operationName = 'GetMeta';
exports.getMetaRef = getMetaRef;

exports.getMeta = function getMeta(dc) {
return executeQuery(getMetaRef(dc));
};
Loading