We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/doobidoo/mcp-memory-service'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
# GitHub Actions Secret Conditional Logic Fix
## Critical Issue Resolved
**Date**: 2024-08-24
**Problem**: Workflows failing due to incorrect secret checking syntax in conditionals
### Root Cause
GitHub Actions does not support checking if secrets are empty using `!= ''` or `== ''` in conditional expressions.
### Incorrect Syntax (BROKEN)
```yaml
# ❌ This syntax doesn't work in GitHub Actions
if: matrix.registry == 'docker.io' && secrets.DOCKER_USERNAME != '' && secrets.DOCKER_PASSWORD != ''
# ❌ This also doesn't work
if: matrix.registry == 'docker.io' && (secrets.DOCKER_USERNAME == '' || secrets.DOCKER_PASSWORD == '')
```
### Correct Syntax (FIXED)
```yaml
# ✅ Check if secrets exist (truthy check)
if: matrix.registry == 'docker.io' && secrets.DOCKER_USERNAME && secrets.DOCKER_PASSWORD
# ✅ Check if secrets don't exist (falsy check)
if: matrix.registry == 'docker.io' && (!secrets.DOCKER_USERNAME || !secrets.DOCKER_PASSWORD)
```
## Changes Applied
### 1. main-optimized.yml - Line 286
**Before:**
```yaml
- name: Log in to Docker Hub
if: matrix.registry == 'docker.io' && secrets.DOCKER_USERNAME != '' && secrets.DOCKER_PASSWORD != ''
```
**After:**
```yaml
- name: Log in to Docker Hub
if: matrix.registry == 'docker.io' && secrets.DOCKER_USERNAME && secrets.DOCKER_PASSWORD
```
### 2. main-optimized.yml - Line 313
**Before:**
```yaml
- name: Build and push Docker image
if: matrix.registry == 'ghcr.io' || (matrix.registry == 'docker.io' && secrets.DOCKER_USERNAME != '' && secrets.DOCKER_PASSWORD != '')
```
**After:**
```yaml
- name: Build and push Docker image
if: matrix.registry == 'ghcr.io' || (matrix.registry == 'docker.io' && secrets.DOCKER_USERNAME && secrets.DOCKER_PASSWORD)
```
### 3. main-optimized.yml - Line 332
**Before:**
```yaml
- name: Docker Hub push skipped
if: matrix.registry == 'docker.io' && (secrets.DOCKER_USERNAME == '' || secrets.DOCKER_PASSWORD == '')
```
**After:**
```yaml
- name: Docker Hub push skipped
if: matrix.registry == 'docker.io' && (!secrets.DOCKER_USERNAME || !secrets.DOCKER_PASSWORD)
```
## How GitHub Actions Handles Secrets in Conditionals
### Secret Behavior
- **Exists**: `secrets.SECRET_NAME` evaluates to truthy
- **Missing/Empty**: `secrets.SECRET_NAME` evaluates to falsy
- **Cannot compare**: Direct string comparison with `!= ''` fails
### Recommended Patterns
```yaml
# Check if secret exists
if: secrets.MY_SECRET
# Check if secret doesn't exist
if: !secrets.MY_SECRET
# Check multiple secrets exist
if: secrets.SECRET1 && secrets.SECRET2
# Check if any secret is missing
if: !secrets.SECRET1 || !secrets.SECRET2
# Combine with other conditions
if: github.event_name == 'push' && secrets.MY_SECRET
```
## Impact
### Before Fix
- ✗ Workflows failed immediately at conditional evaluation
- ✗ Error: Invalid conditional syntax
- ✗ No Docker Hub operations could run
### After Fix
- ✅ Conditionals evaluate correctly
- ✅ Docker Hub steps run when credentials exist
- ✅ GHCR steps always run (no credentials needed)
- ✅ Skip messages show when credentials missing
## Alternative Approaches
### Option 1: Environment Variable Check
```yaml
env:
HAS_DOCKER_CREDS: ${{ secrets.DOCKER_USERNAME != null && secrets.DOCKER_PASSWORD != null }}
steps:
- name: Login
if: env.HAS_DOCKER_CREDS == 'true'
```
### Option 2: Continue on Error
```yaml
- name: Log in to Docker Hub
continue-on-error: true
uses: docker/login-action@v3
```
### Option 3: Job-Level Conditional
```yaml
jobs:
docker-hub-publish:
if: secrets.DOCKER_USERNAME && secrets.DOCKER_PASSWORD
```
## Testing
All changes validated:
- ✅ YAML syntax check passed
- ✅ Conditional logic follows GitHub Actions standards
- ✅ Both positive and negative conditionals fixed
## References
- [GitHub Actions: Expressions](https://docs.github.com/en/actions/learn-github-actions/expressions)
- [GitHub Actions: Contexts](https://docs.github.com/en/actions/learn-github-actions/contexts#secrets-context)
Date: 2024-08-24
Status: Fixed and ready for deployment