Lompat ke konten
Aback Tools Logo

Cara Mendeteksi dan Memperbaiki Kesalahan YAML: Sintaks, Indentasi, dan Validasi

Cara mendeteksi dan memperbaiki kesalahan YAML: mengapa indentasi dan tab merusak parsing, cara membaca pesan parser, bahaya kunci duplikat, anchor dan alias, serta alur validasi lima langkah untuk Kubernetes, Docker Compose, dan berkas CI.

DH
Tutorials & How-Tos12 menit baca2,700 kata

YAML adalah bahasa konfigurasi infrastruktur modern — ia menjalankan GitHub Actions Anda, manifes Kubernetes Anda, stack Docker Compose Anda, dan pipeline CI/CD Anda. Ia juga salah satu format yang paling rawan kesalahan saat ditulis manual, karena satu spasi yang tidak sejajar, tab yang tak terlihat, atau titik dua tanpa tanda kutip menghasilkan kegagalan parsing yang keras atau dokumen yang keliru secara diam-diam. Panduan ini mencakup setiap kategori kesalahan YAML, cara membaca pesan yang dihasilkan parser, dan cara tercepat mendeteksi serta memperbaiki masing-masing.

#1Penyebab kesalahanIndentasi selalu jadi biang keladi
0Tab diizinkanSpesifikasi melarangnya sebagai indentasi
< 1dtkWaktu validasiLokal di peramban, tanpa unggahan

Mengapa kesalahan YAML sulit di-debug

YAML memperoleh seluruh strukturnya dari whitespace. Tidak ada kurung siku, tidak ada kurung kurawal, tidak ada pembatas blok eksplisit — hanya tingkat indentasi dan titik dua. Ini membuat YAML sangat mudah dibaca ketika benar dan sangat menyebalkan ketika salah, karena karakter yang sama yang mengorganisir data Anda dapat menghancurkannya secara diam-diam jika bergeser satu kolom.

Parser melaporkan di mana ia menyerah, bukan di mana Anda membuat kesalahan

Kesulitan utama pesan kesalahan YAML adalah parser melaporkan baris di mana mereka berhenti dapat menafsirkan dokumen — bukan baris di mana kesalahan aslinya dibuat. Titik dua yang hilang di baris 15 mungkin tidak muncul sebagai kesalahan sampai baris 22, ketika kunci berikutnya datang dalam konteks yang tak terduga. Artinya, Anda hampir selalu perlu melihat beberapa baris di atas kesalahan yang dilaporkan untuk menemukan penyebab sebenarnya.

  • Kesalahan indentasi menjalar berantai — blok induk yang salah indentasi membuat setiap kunci anak melaporkan kesalahan
  • Karakter tab tampak identik dengan spasi tetapi memicu kegagalan parsing di parser mana pun yang sesuai spesifikasi
  • Kunci duplikat lolos pemeriksaan sintaks dasar secara diam-diam — satu nilai ditimpa tanpa peringatan apa pun
  • Karakter khusus tanpa tanda kutip seperti :, #, *, dan & mengubah makna dokumen secara tak terduga
  • Anchor dan alias gagal diam-diam jika sebuah alias merujuk ke anchor yang tidak ada dalam berkas yang sama

Note

Pesan kesalahan YAML sangat bervariasi antar parser. PyYAML, js-yaml, gopkg.in/yaml.v3 milik Go, dan Psych milik Ruby semuanya menghasilkan rumusan berbeda untuk kesalahan dasar yang sama. Kategori kesalahan dalam panduan ini tidak terikat bahasa — begitu Anda memahami kategorinya, Anda dapat memperbaiki masalahnya apa pun parser yang Anda gunakan.

Versi YAML itu penting

Sebagian besar alat modern menarget YAML 1.2, yang mengetatkan beberapa aturan parsing yang diizinkan YAML 1.1. Misalnya, YAML 1.1 memperlakukan yes, no, on, dan off sebagai nilai boolean; YAML 1.2 tidak. Jika konfigurasi Anda menggunakan string telanjang ini dan validator Anda melaporkan konversi tipe yang tak terduga, ketidakcocokan versi YAML adalah penyebabnya. Selalu periksa versi spesifikasi mana yang diimplementasikan parser runtime Anda.

Kesalahan sintaks YAML yang paling umum

Kesalahan YAML jatuh ke dalam sejumlah kecil kategori yang berulang. Mengenali kategori dari pesan kesalahan — atau dari tampilan visual berkas — memangkas waktu diagnosis dari menit menjadi detik.

Kesalahan indentasi

YAML menuntut indentasi yang konsisten. Spesifikasi tidak mewajibkan jumlah spasi tertentu, tetapi setiap tingkat harus menjorok lebih dalam dari induknya sebesar jumlah yang sama di dalam blok tersebut. Mencampur indentasi dua dan empat spasi dalam berkas yang sama, atau menjorokkan item sekuens satu spasi lebih sedikit dari pasangannya, akan menghasilkan kesalahan "indentasi tak terduga" atau "entri blok yang diharapkan tidak ditemukan". Praktik teraman adalah dua spasi per tingkat di seluruh berkas.

Karakter tab alih-alih spasi

Spesifikasi YAML secara eksplisit melarang karakter tab sebagai indentasi. Sebagian besar parser melempar kesalahan "menemukan karakter yang tidak dapat memulai token apa pun" atau "karakter tab ada di awal baris" saat menemukannya. Masalah ini tak terlihat di sebagian besar editor kecuali Anda mengaktifkan opsi "tampilkan whitespace" atau "render whitespace". Atur editor Anda untuk selalu memperluas tab menjadi spasi untuk berkas .yaml dan .yml guna menghilangkan kategori ini sepenuhnya.

Warning

Banyak pengembang menempel YAML dari situs dokumentasi, pesan Slack, atau jawaban Stack Overflow. Sumber-sumber ini sering mengubah spasi menjadi tab saat salin-tempel. Selalu tempel dulu ke editor teks polos atau validator daring saat bekerja dengan YAML hasil salinan.

String tanpa tanda kutip dengan karakter khusus

YAML mencadangkan beberapa karakter untuk tujuan struktural: titik dua, pagar, asterisk, ampersand, tanda seru, pipe, tanda lebih dari, kurung siku, dan kurung kurawal. Ketika salah satu karakter ini muncul dalam nilai string tanpa tanda kutip, parser dapat salah menafsirkannya sebagai token sintaks. Manifestasi paling umum adalah nilai URL seperti https://example.com:8080 yang memicu kesalahan "mapping values are not allowed here" karena :8080 diparse sebagai kunci mapping baru. Beri tanda kutip pada setiap nilai string yang memuat karakter-karakter ini.

Jenis kesalahanPesan parser yang khasAkar penyebabPerbaikan
Indentasi"could not find expected :"Blok diindentasi pada tingkat yang salahSejajarkan ke induk + 2 spasi
Karakter tab"character that cannot start token"Tab dipakai alih-alih spasiGanti semua tab dengan spasi
Titik dua tanpa kutip"mapping values not allowed here"Titik dua dalam nilai string polosBeri tanda kutip pada nilai
Kunci duplikatSenyap atau ditentukan implementasiKunci yang sama muncul dua kali dalam blokHapus atau ganti nama duplikat
Alias tak terdefinisi"found undefined alias"* merujuk ke & anchor yang tidak dideklarasikanDeklarasikan anchor sebelum alias
Skalar multibarisParser berhenti di tengah blokIndikator blok skalar yang salahGunakan | untuk literal, > untuk folded
Konversi booleanTipe salah saat runtimeyes/no/on/off dalam mode YAML 1.1Beri tanda kutip: "yes"

Cara membaca pesan kesalahan YAML

Pesan kesalahan YAML terkenal sangat singkat. Memahami cara memecahkan dua atau tiga informasi yang benar-benar diberikan menghemat waktu debugging yang signifikan. Setiap pesan parser memuat referensi baris dan kolom, deskripsi apa yang diharapkan, dan terkadang deskripsi apa yang ditemukan sebagai gantinya.

Kesalahan pada baris 30 kolom 1 biasanya berarti masalahnya dimulai di baris 20. Baca ke atas.

- Praktik terbaik interpretasi kesalahan YAML

Tiga bagian kesalahan parser

  • Baris dan kolom: menunjuk ke tempat parsing gagal, tidak selalu tempat kesalahannya — lihat 5–10 baris di atas
  • Token yang diharapkan: apa yang dicari parser — "diharapkan nilai mapping" berarti ia mengharapkan titik dua setelah kunci
  • Token yang ditemukan: apa yang sebenarnya ditemui parser — "ditemukan entri sekuens blok" berarti ia menabrak item daftar - di tempat ia mengharapkan kunci

Memecahkan pola pesan yang umum

"could not find expected ':'" berarti parser membaca kunci mapping tetapi mencapai akhir baris atau token bukan titik dua sebelum menemukan pemisah. Kunci mungkin memuat karakter tercadangkan yang mengakhiri token kunci lebih awal, atau titik dua terlewat secara tak sengaja. "mapping values are not allowed here" berarti sebuah : muncul dalam konteks di mana parser tidak berada di blok mapping — biasanya disebabkan URL atau string versi tanpa tanda kutip. "found duplicate key" dimunculkan oleh parser ketat (yaml.v3 milik Go, ruamel.yaml) ketika nama kunci yang sama muncul lebih dari sekali dalam satu blok — perubahan konfigurasi di mana kunci lama tidak dihapus.

Tip

Saat debugging, kecilkan berkas ke minimum yang masih mereproduksi kesalahan. Komentari atau hapus blok besar sampai kesalahan hilang, lalu tambahkan kembali blok terakhir yang dihapus untuk mengisolasi bagian yang tepat. [Validator YAML](/tools/data/validators/yaml-validator) membuat ini cepat — tempel sebagian berkas untuk memeriksanya tanpa menjalankan alat lokal apa pun.

Cara mendeteksi dan memperbaiki kesalahan YAML langkah demi langkah

Jalur tercepat dari berkas YAML yang rusak ke yang berfungsi adalah alur kerja terstruktur yang sadar kategori, bukan pemeriksaan visual baris demi baris. Lima langkah ini mencakup setiap skenario umum.

1

Validasi dulu dokumen mentahnya

Buka Validator YAML dan tempel dokumen lengkap Anda. Jika validator melaporkan kesalahan, catat nomor baris dan kategori pesannya sebelum membuat perubahan apa pun. Memperbaiki satu kesalahan dalam satu waktu dan memvalidasi ulang setelah setiap perbaikan mencegah Anda tanpa sengaja menimbulkan masalah baru saat memperbaiki yang lama.

2

Perbaiki kesalahan indentasi dan tab

Aktifkan tampilan whitespace yang terlihat di editor Anda (VS Code: View → Render Whitespace → All). Ganti setiap tab dengan dua spasi. Pastikan setiap blok anak diindentasi tepat dua spasi lebih dalam dari induknya. Item sekuens (-) dihitung sebagai satu tingkat indentasi: konten setelah - harus berada di baris yang sama atau diindentasi dua spasi pada baris berikutnya. Validasi ulang setelah langkah ini sebelum melanjutkan.

3

Beri tanda kutip pada string dengan karakter khusus

Tinjau setiap nilai string tanpa tanda kutip yang memuat titik dua, pagar, asterisk, ampersand, tanda seru, atau pipe. Bungkus dengan tanda kutip ganda. Beri perhatian khusus pada URL, string versi seperti v2.0:latest, dan nilai yang diawali kurung kurawal atau kurung siku (yang akan diparse sebagai koleksi flow, bukan string). Setelah memberi tanda kutip, validasi ulang untuk memastikan kesalahan mapping telah teratasi.

4

Periksa kunci duplikat

Jalankan Detektor Kunci Duplikat YAML pada dokumen yang sama. Kunci duplikat lolos validasi sintaks dasar tetapi menimpa nilai secara diam-diam saat runtime — sebagian besar alat CI/CD dan Kubernetes menerapkan nilai terakhir yang terlihat, sementara yang lain menerapkan yang pertama. Salah satu perilakunya berbahaya. Hapus atau ganti nama duplikat apa pun yang ditemukan detektor.

5

Validasi anchor dan alias jika digunakan

Jika YAML Anda menggunakan & anchor dan * alias — umum di berkas values Helm, playbook Ansible, dan config Docker Compose yang kompleks — jalankan Validator Anchor dan Alias YAML. Ia memeriksa bahwa setiap alias merujuk ke anchor yang dideklarasikan, tidak ada merge-key melingkar, dan nama anchor mengikuti konvensi yang konsisten.

Validator YAML

Tempel dokumen YAML apa pun dan dapatkan laporan kesalahan sintaks dan struktur seketika dengan nomor baris dan kolom — berjalan sepenuhnya di peramban Anda, tidak ada yang diunggah.

Open tool

Kesalahan YAML menurut jenis berkas

Jenis berkas YAML yang berbeda menarik pola kesalahan yang berbeda. Mengetahui kesalahan apa yang paling umum pada setiap jenis berkas memungkinkan Anda memeriksa hal yang tepat terlebih dahulu alih-alih memindai seluruh dokumen.

Workflow GitHub Actions

Workflow GitHub Actions gagal pada tahap parsing sebelum job apa pun dieksekusi, menjadikan kesalahan YAML hal pertama yang harus diperbaiki. Kesalahan paling umum adalah on: yang diperlakukan sebagai boolean (true) karena on adalah boolean YAML 1.1 — beri tanda kutip sebagai "on" atau gunakan nama trigger lengkap. Blok run: langkah dengan skrip shell multibaris yang memakai indikator blok skalar yang salah (folded > alih-alih literal |) juga menyebabkan kesalahan senyap di mana baris baru dilipat. Gunakan | untuk skrip shell multibaris. Validator Workflow GitHub Actions memeriksa sintaks YAML dan aturan struktural khas workflow dalam satu lintasan.

Manifes Kubernetes

Kesalahan YAML Kubernetes biasanya melibatkan kesalahan indentasi bersarang yang dalam — blok containers yang diindentasi empat spasi di bawah spec padahal blok sekitarnya memakai dua, atau blok resources.limits ditempatkan pada tingkat penyusunan yang salah. Server API Kubernetes melaporkannya sebagai kesalahan validasi bidang, bukan kesalahan sintaks YAML, karena kubectl apply pertama-tama memparse YAML dengan sukses lalu memvalidasi skema objeknya. Gunakan Validator Kubernetes untuk menangkap masalah YAML dan skema sebelum diterapkan. Penyorot Diff untuk Config JSON/YAML berguna untuk membandingkan manifes antar lingkungan.

Berkas Docker Compose

Kesalahan docker-compose.yml Docker Compose paling sering berupa kesalahan indentasi pada definisi layanan, pemetaan port tanpa tanda kutip seperti 3000:3000 (titik dua memicu kesalahan parser kecuali diberi tanda kutip atau ditulis sebagai item sekuens), dan nilai variabel lingkungan yang memuat tanda sama dengan atau karakter pagar tanpa tanda kutip. Selalu beri tanda kutip pada nilai variabel lingkungan. Validator Docker Compose memvalidasi struktur YAML dan skema khusus Compose.

Berkas values.yaml Helm

Berkas values.yaml Helm sering menggunakan anchor YAML untuk konfigurasi DRY — dan kesalahan terkait anchor umum terjadi setelah restrukturisasi. Validator Values Helm memvalidasi sintaks khusus Helm, sementara Alat Diff Drift YAML Values Helm membantu membandingkan nilai antar rilis untuk menangkap drift yang ditimbulkan oleh penyuntingan baru-baru ini.


Playbook Ansible

Playbook Ansible menggabungkan YAML standar dengan ekspresi template Jinja2 yang menggunakan kurung kurawal ganda di sekitar nama variabel. Kurung kurawal ganda bukan sintaks YAML, tetapi muncul di dalam nilai string YAML. Jika ekspresi Jinja muncul sebagai keseluruhan nilai kunci tanpa tanda kutip, parser YAML Ansible memperlakukan kurung kurawal pembuka sebagai awal mapping flow. Selalu beri tanda kutip pada setiap nilai YAML yang diawali kurung kurawal ganda. Validator Ansible menangani lapisan YAML dan Jinja2 dalam validasi playbook.

Kategori kesalahan YAML tingkat lanjut

Melampaui sintaks dasar, beberapa fitur YAML memiliki kategori kesalahan sendiri yang membutuhkan pendekatan diagnostik spesifik. Ini lebih jarang tetapi cenderung lebih sulit didiagnosis tanpa alat yang tepat.

Kunci duplikat — kehilangan data senyap

Kunci duplikat adalah kategori kesalahan YAML paling berbahaya karena tidak memicu kegagalan parsing di sebagian besar parser. Ketika Anda merefaktor berkas konfigurasi dan menambahkan nilai baru untuk kunci tanpa menghapus yang lama, kedua kunci hidup berdampingan di teks mentah. Tergantung parser, nilai pertama atau terakhir yang menang — PyYAML dan js-yaml sama-sama memakai kemunculan terakhir secara diam-diam, sedangkan yaml.v3 milik Go melaporkan kesalahan. Hasilnya adalah berkas konfigurasi yang tampak benar saat dibaca tetapi berperilaku berbeda saat runtime dari yang Anda harapkan.

Warning

Kunci duplikat di ConfigMap dan Secret Kubernetes sangat berbahaya. YAML-nya berhasil diparse, kubectl apply menerima resource, tetapi hanya satu dari nilai duplikat yang tersimpan. Nilai yang dibuang menyebabkan salah konfigurasi senyap pada pod yang memakainya. Selalu jalankan [Detektor Kunci Duplikat YAML](/tools/data/validators/yaml-duplicate-key-detector) sebelum menerapkan YAML infrastruktur.

Kesalahan anchor dan alias

Anchor YAML (&name) memungkinkan Anda mendefinisikan nilai sekali dan merujuknya di tempat lain dengan alias (*name). Kesalahan terjadi ketika alias merujuk ke anchor yang dideklarasikan belakangan dalam berkas (referensi maju tidak diizinkan dalam YAML), ketika dua anchor berbagi nama yang sama (yang kedua menimpa yang pertama secara diam-diam), atau ketika merge key (<<: *alias) dipakai pada node yang bukan mapping. Kesalahan ini tak terlihat oleh validator dasar — hanya validator yang secara khusus melacak deklarasi anchor dan rujukan alias yang akan menangkapnya.

Ketidaksesuaian substitusi variabel lingkungan

Docker Compose, GitHub Actions, dan Ansible semuanya mendukung substitusi variabel lingkungan di dalam nilai YAML. Ketika variabel lingkungan tidak diatur saat parsing, substitusi gagal, memakai string kosong, atau mundur ke nilai bawaan — tergantung sintaks yang dipakai. Dokumen YAML yang lolos validasi di CI bisa gagal di produksi karena variabel lingkungan wajib tidak ada. Alat Pratinjau Substitusi Env YAML memungkinkan Anda mempratinjau dokumen YAML yang diperluas dengan sekumpulan nilai variabel tertentu sebelum deployment.

  • $VAR tanpa nilai bawaan: gagal diam-diam jika VAR tidak diatur — substitusikan string kosong
  • Sintaks ${VAR:-default}: mundur ke "default" jika VAR tidak diatur — uji kedua jalur
  • Sintaks ${VAR:?error message}: melempar kesalahan eksplisit jika VAR tidak diatur — diutamakan untuk variabel wajib
  • Substitusi tanpa tanda kutip yang diawali kurung kurawal: parser memperlakukan substitusi variabel sebagai mapping flow — selalu beri tanda kutip

Mencegah kesalahan YAML dalam jangka panjang

Memperbaiki kesalahan YAML satu per satu cepat sekali Anda mengenali kategorinya. Mencegahnya mencapai produksi membutuhkan seperangkat kecil kebiasaan konsisten dan pemeriksaan otomatis.

Konfigurasi editor

Atur editor Anda memakai indentasi dua spasi untuk berkas YAML, menyisipkan spasi alih-alih tab, dan mengaktifkan whitespace yang terlihat. Di VS Code, pasang ekstensi YAML dari Red Hat yang menyediakan pemeriksaan sintaks real-time, validasi skema (untuk Kubernetes, GitHub Actions, dan format lain dengan JSON Schema yang dipublikasikan), serta autocompletion. Tambahkan berkas .editorconfig ke proyek Anda untuk menegakkan pengaturan ini bagi setiap anggota tim apa pun konfigurasi editor lokal mereka.

  • Pengaturan .editorconfig untuk YAML: indent_style = space, indent_size = 2, trim_trailing_whitespace = true
  • VS Code: pasang ekstensi YAML (Red Hat) — ia memvalidasi skema dan sintaks secara real-time
  • IDE JetBrains: aktifkan dukungan YAML dan atur level inspeksi ke Warning untuk kesalahan struktural
  • Vim/Neovim: gunakan yaml-language-server via nvim-lspconfig untuk diagnostik inline
  • Prettier: memformat YAML secara konsisten — mencegah drift whitespace dan indentasi antar anggota tim

Validasi otomatis dalam CI/CD

Tambahkan langkah linting YAML ke pipeline CI Anda yang berjalan pada setiap pull request yang menyentuh berkas .yaml atau .yml apa pun. yamllint adalah alat CLI standar — ia memvalidasi sintaks, memeriksa kunci duplikat, menegakkan batas panjang baris, dan menangkap masalah konversi string truthy. Konfigurasikan dengan berkas .yamllint.yaml di akar proyek dan tambahkan sebagai hook pre-commit atau langkah CI yang berjalan sebelum job deployment apa pun.

Tip

Untuk proyek spesifik Kubernetes, kombinasikan yamllint untuk sintaks YAML dengan kubeval atau kubeconform untuk validasi skema. Kedua alat mencakup kategori kesalahan berbeda: yamllint menangkap masalah whitespace dan sintaks, sedangkan kubeval menangkap nama bidang yang salah, bidang wajib yang hilang, dan ketidakcocokan tipe terhadap skema API Kubernetes.

Disiplin review kode

Diff YAML dalam review kode menjebak mudah disetujui tanpa menangkap kesalahan. Indentasi dua spasi versus empat spasi tampak seperti preferensi format tetapi mengubah struktur dokumen. Kunci yang dipindah ke tingkat indentasi lain mengubah blok induknya. Gunakan Penyorot Diff untuk Config JSON/YAML untuk meninjau perubahan YAML secara semantik — ia menunjukkan kunci mana yang ditambahkan, dihapus, atau diubah berdasarkan nilai, bukan berdasarkan diff baris mentah, membuat perubahan struktural langsung terlihat.

Penyorot Diff untuk Config JSON/YAML

Bandingkan dua berkas config YAML pada tingkat jalur kunci untuk menangkap perubahan struktural, kunci yang dipindah, dan pembaruan nilai — lebih baik daripada diff baris mentah untuk review infrastruktur.

Open tool

Key takeaways

  • Indentasi dan karakter tab menyebabkan mayoritas kesalahan YAML — atur editor Anda memakai spasi dan menampilkan whitespace.
  • Kesalahan parser YAML menunjuk ke tempat parsing gagal, bukan tempat kesalahannya dibuat — selalu lihat 5–10 baris di atas baris yang dilaporkan.
  • Kunci duplikat adalah kategori kesalahan paling berbahaya karena berhasil diparse tetapi menimpa nilai secara diam-diam saat runtime.
  • String tanpa tanda kutip yang memuat titik dua, pagar, asterisk, atau kurung kurawal salah ditafsirkan sebagai token struktural YAML — selalu beri tanda kutip.
  • Gunakan Validator YAML untuk kesalahan sintaks, Detektor Kunci Duplikat YAML untuk penimpaan senyap, dan Validator Anchor dan Alias YAML untuk masalah anchor.
  • Tambahkan yamllint ke pipeline CI Anda dan .editorconfig ke proyek Anda agar kesalahan YAML tidak mencapai review kode.
  • Validator khusus jenis berkas (Kubernetes, Docker Compose, GitHub Actions, Ansible) menangkap kesalahan skema yang tidak dapat ditangkap validasi sintaks YAML saja.

Pertanyaan yang sering diajukan

Indentation mistakes are by far the most common cause - YAML uses whitespace to define structure, so a block indented by three spaces instead of two creates a completely different document than intended. The second most common cause is tabs: the YAML spec forbids tab characters as indentation, but many text editors insert them silently. After those two, missing colons, unquoted special characters, and duplicate keys account for the majority of YAML parsing failures encountered in real-world configs.

The Aback Tools YAML Validator processes your document entirely in your browser with no upload required. Paste your YAML, click Validate, and every error is reported with a line number and a description of what the parser expected. For deeper audits - finding duplicate keys that pass basic validation, or checking anchor and alias references - the YAML Duplicate Key Detector and YAML Anchors and Aliases Validator on the same platform cover those categories.

YAML parsers report the line where they gave up trying to interpret the document, not always the line where the original mistake was made. For example, if you omit a closing colon on line 15, the parser may not notice until line 20 when the next key arrives in an unexpected context. Always look at the 5-10 lines above the reported error line to find the actual source of the problem. An indentation error on a parent block will cascade and surface as an error on a child key lines later.

Yes, and they are one of the hardest bugs to spot because tabs and spaces look identical in most editors. The YAML specification explicitly forbids tab characters for indentation - only space characters (U+0020) are valid. If your editor is configured to expand tabs to spaces, you are safe. If it inserts literal tab characters, the YAML parser will throw a "found character that cannot start any token" or similar error. Enable visible whitespace in your editor or use a validator to catch this instantly.

This error almost always means a colon was placed where the parser did not expect a mapping key. The most frequent cause is an unquoted string value that contains a colon - for example, writing url: https://example.com:8080 without quotes causes the parser to interpret 8080 as a mapping key inside the value. Fix it by quoting the value: url: "https://example.com:8080". A stray colon on a comment-looking line or a misindented key also triggers this error.

A duplicate key error occurs when the same key appears more than once in the same mapping block. The YAML spec says behaviour is undefined for duplicate keys, so different parsers handle it differently: some throw an error, others silently keep the last value, and others keep the first. The dangerous case is silent overwriting - your file parses without an error, but one of the values is ignored. Use the YAML Duplicate Key Detector to find these before they cause runtime bugs in production configs.

This error means the parser expected a colon to separate a mapping key from its value but found something else. The most common cause is a string key that contains special characters (like #, *, :, or &) without being quoted. Wrap the key in double quotes: "key:with:colons": value. A missing colon after a block mapping indicator or a key on a flow mapping line that was not closed before the next key also triggers this message. Check the reported line and the line immediately above it.

Yes. GitHub Actions parses workflow YAML files before executing any jobs. A syntax error in a workflow file causes the run to fail immediately at the parse stage with an "Invalid workflow file" message that references the problematic line. Tab-versus-space errors and misaligned steps are the most common culprits in Action workflows. Run your workflow YAML through the Aback Tools YAML Validator before pushing, or use the GitHub Actions Workflow Validator for workflow-specific structural checks beyond basic YAML syntax.

ShareXLinkedIn